Как загрузить файл, используя 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,