Как загрузить файл, используя multer или body-parser

Я новичок в NodeJS, читая книгу «Веб-разработка с MongoDB и NodeJS». Я застрял в его главе 6 с 'multer'. Когда я использую multer для загрузки файлов, сервер выдает следующую ошибку:

/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

но когда я заменяю его на bodyParser, сервер запускается, но когда я нажимаю кнопку загрузки, в браузере появляется следующая ошибка.

500 TypeError: Cannot read property 'file' of undefined

Тем не менее, он должен перенаправить меня на другую страницу, где показан загруженный файл.

Вот мой код bodyParser, пожалуйста, посмотрите, правильно ли я его использую, потому что он дает мне «устаревший body-parser» при запуске сервера. Я видел другие вопросы, такие как мой, и я последовал, но ни один из них на самом деле не работает.

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

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

Следующий код показывает, как я использую multer, на случай, если я что-то не должен делать, пожалуйста, дайте мне знать. Какой из них будет лучше в случае загрузки файлов, body-parser или 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();

Предыдущий блок кода - это логика, которую я использую для загрузки файла. В ошибке он ссылается на «файл» как неопределенный, который находится в следующей строке в функции saveImage. Он не может получить путь и поэтому выдает ошибку 500 в соответствии с остальной частью функции saveImage. Почему «файл» здесь не определен? Я не понимаю

var tempPath = req.files.file.path,

Ответы на вопрос(2)

Ваш ответ на вопрос