Wie lade ich eine Datei mit Multer oder Body-Parser hoch?

Ich bin ein NodeJS-Anfänger und folge einem Buch "Web Development with MongoDB and NodeJS". Ich stecke mit "Multer" in Kapitel 6 fest. Wenn ich Multer zum Hochladen von Dateien verwende, gibt der Server den folgenden Fehler aus:

/Users/fk / Documents / imageuploader / node_modules / express / lib / application.js: 209
throw new TypeError('app.use() requires middleware functions'); ^

TypeError: app.use() requires middleware functions

Aber wenn ich es durch bodyParser ersetze, wird der Server gestartet, aber wenn ich auf die Schaltfläche zum Hochladen klicke, erhalte ich den folgenden Fehler im Browser.

500 TypeError: Cannot read property 'file' of undefined

Es soll mich jedoch zu einer anderen Seite weiterleiten, auf der die hochgeladene Datei angezeigt wird.

Hier ist mein bodyParser-Code. Bitte überprüfen Sie, ob ich ihn richtig verwende, da ich beim Starten des Servers den Status "body-parser veraltet" erhalte. Ich habe andere Fragen wie meine gesehen und bin ihnen gefolgt, aber keine davon funktioniert wirklich.

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: true
}));

app.use(bodyParser({
  uploadDir: path.join(__dirname, '../public/upload/temp')
}));

Der folgende Code zeigt, wie ich Multer verwende, falls es etwas gibt, das ich nicht tun sollte, lassen Sie es mich bitte wissen. Welches ist besser für das Hochladen von Dateien, Body-Parser oder Multer?

app.use(multer({
  dest: path.join(__dirname, '../public/upload/temp')
}));


var saveImage = function() {
  var possible = 'abcdefghijklmnopqrstuvwxyz0123456789',
    imgUrl = '';

  for (var i = 0; i < 6; i += 1) {
    imgUrl += possible.charAt(Math.floor(Math.random() * possible.length));
  }

  var tempPath = req.files.file.path,
    ext = path.extname(req.files.file.name).toLowerCase(),
    targetPath = path.resolve('./public/upload/' + imgUrl + ext);

  if (ext === '.png' || ext === '.jpg' || ext === '.jpeg' || ext === '.gif') {
    fs.rename(tempPath, targetPath, function(err) {
      if (err) throw err;
      res.redirect('/images/' + imgUrl);
    });
  } else {
    fs.unlink(tempPath, function() {
      if (err) throw err;

      res.json(500, {
        error: 'Only image files are allowed.'
      });
    });
  }
};
saveImage();

Preceding Codeblock ist die Logik, die ich zum Hochladen der Datei verwende. In dem Fehler bezieht es sich auf 'Datei' als undefiniert, was in der folgenden Zeile in der Funktion saveImage steht. Es kann den Pfad nicht abrufen und löst daher den Fehler 500 gemäß dem else-Teil der saveImage-Funktion aus. Warum ist 'Datei' hier undefiniert? Ich verstehe es nicht.

var tempPath = req.files.file.path,

Antworten auf die Frage(4)

Ihre Antwort auf die Frage