[英]NodeJS Multer unable to catch eroor
如何捕獲調用的錯誤並返回 res status msg? 我無法捕獲 userController.uploadFile 中的任何錯誤,如果我嘗試在 routes.post 中執行上傳(req,res(err),則未定義 req。
var storage = multer.diskStorage({
destination(req, file, cb) {
cb(null, url);
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname))
}
}).single('file');
let upload = multer({
storage: storage,
limits: { fileSize: maxSize },
fileFilter: (req, file, cb) => {
console.log(file);
if (file.mimetype !== 'image/jpeg' || file.mimetype !== 'image/png') {
return cb(new Error('Only jpeg images allowed'))
}
cb(null, true)
}
});
routes.post('/fileupload', upload, userController.uploadFile);
我認為我們可以通過一些調整來實現它。 我進行了這些更改並使用一些圖像進行了測試。
您的用戶 controller 看起來會有點不同,但像這樣應該可以。
我已經更新以將任何文件過大錯誤傳遞給 controller,同樣這將在 req.uploadError 屬性中,因此您可以隨意處理。
const userController = {
uploadFile(req, res) {
if (req.uploadError) {
res.status(400).send("An error occurred - " + req.uploadError.message);
} else {
res.status(201).send("All good");
}
}
}
var storage = multer.diskStorage({
destination(req, file, cb) {
cb(null, url);
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname))
}
});
let upload = multer({
storage: storage,
limits: { fileSize: maxSize },
fileFilter: (req, file, cb) => {
console.log(file);
if (file.mimetype !== 'image/jpeg' && file.mimetype !== 'image/png') {
cb(new Error('Only jpeg or png images allowed'));
} else {
cb(null, true);
}
}
}).single('file');
routes.post('/fileupload', (req, res, next) => {
upload(req, res, err => {
req.uploadError = err;
next();
})
}, userController.uploadFile);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.