根据
multer 文档 (
https://github.com/expressjs/multer#error-handling)
错误处理
当遇到错误时,Multer 会将错误委托给 Express。您可以使用标准的 express 方法显示一个漂亮的错误页面。
如果您想要专门捕获 Multer 的错误,您可以自己调用中间件函数。 此外,如果您只想捕获 Multer 错误,您可以使用附加到 multer 对象本身的 MulterError 类 (例如 err instanceof multer.MulterError)。
code sample
const multer = require('multer')
const upload = multer().single('avatar')
app.post('/profile', function (req, res) {
upload(req, res, function (err) {
if (err instanceof multer.MulterError) {
} else if (err) {
}
})
})
当我们使用最新版本的multer(v1.4.5-lts.1)重新编写此问题的代码时
const express = require('express');
const multer = require('multer');
const app = express();
const upload = multer({ dest: './uploads/' }).single('fieldName');
app.get('/', (req, res) => {
res.send('hello world');
});
app.post(
'/upload',
(req, res, next) => {
upload(req, res, (err) => {
if (err instanceof multer.MulterError) {
res.status(404).send(err + 'Upload failed due to multer error');
} else if (err) {
res.status(404).send(err + 'Upload failed due to unknown error');
}
next();
});
},
(req, res) => {
res.status(204).end();
}
);
app.listen(3000);
为了检查Multer错误和非Multer错误,我们可以使用fileFilter和limits添加验证。
例如:
我正在添加一个CSV文件过滤方法和一些限制
const csvFilter = (req, file, cb) => {
console.log('csv filter working');
if (file.mimetype.includes('csv')) {
cb(null, true);
} else {
cb('Please upload only csv file.', false);
}
};
const upload = multer({
dest: './uploads/',
fileFilter: csvFilter,
limits: { files: 1, fileSize: 1024 }
}).single('fieldName');
当我们试图上传非CSV文件或大小超过1kb的文件或多个文件时,会出现不同的错误。