Я новичок 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 revrecated" при запуске сервера. Я видел другие вопросы, такие как мои, и я следовал, но никто из них не работает.
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();
Предполагаемый блок кода - это логика, которую я использую для загрузки файла. В ошибке это ссылается на "файл" как undefined, который находится в следующей строке функции saveImage. Он не может получить путь и, следовательно, выдает ошибку 500 в соответствии с другой частью функции saveImage. Почему здесь находится "файл" undefined? Я не понимаю.
var tempPath = req.files.file.path,