gpt4 book ai didi

javascript - NodeJS Multer无法捕获错误

转载 作者:行者123 更新时间:2023-12-04 08:35:40 28 4
gpt4 key购买 nike

如何捕获调用的错误并返回 res 状态信息?我无法在 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);

关于javascript - NodeJS Multer无法捕获错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64817141/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com