Comment télécharger un fichier en utilisant multer ou body-parser

Je suis un NodeJS débutant, en suivant un livre "le Développement Web avec MongoDB et NodeJS". Je suis bloqué au chapitre 6 avec "multer'. Lorsque j'utilise multer pour l'upload de fichiers, le serveur lance le message d'erreur suivant:

/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

mais quand je le remplace par bodyParser le serveur s'allume mais quand je clique sur le bouton de téléchargement il me donne l'erreur suivante dans le navigateur.

500 TypeError: Cannot read property 'file' of undefined

Cependant, il est censé me diriger vers une autre page, où le fichier téléchargé est montré.

Voici mon bodyParser code, voir si je suis en utilisant correctement parce qu'il me donne "corps-analyseur obsolète" au démarrage du serveur. J'ai vu d'autres questions comme la mienne et je l'ai suivie, mais aucun d'entre eux fonctionnent vraiment.

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

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

De code suivant montre comment j'ai utiliser multer, juste au cas où si il y a quelque chose que je ne devrais pas faire, s'il vous plaît laissez-moi savoir. Celui qui convient le mieux en cas de téléchargement de fichiers, le corps-analyseur ou 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();

Précédent bloc de code est la logique que j'utilise pour télécharger le fichier. Dans l'erreur, il se réfère à "fichier" comme indéfini qui est dans la ligne suivante dans le saveImage fonction. Il est impossible d'obtenir le chemin d'accès et le jette donc l'erreur 500 selon la partie de la saveImage fonction. Pourquoi est - 'fichier' undefined ici? Je n'ai pas l'obtenir.

var tempPath = req.files.file.path,

source d'informationauteur Farooq Khan