javascript - NodeJS Multer 无法捕捉 eroor
问题描述
如何捕获调用的错误并返回 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);
解决方案
我认为我们可以通过一些调整来实现它。我已经进行了这些更改并使用了一些图像进行了测试。
你的用户控制器看起来会有些不同,但这样的东西应该可以工作。
我已经更新将任何文件太大的错误传递给控制器,这将再次出现在 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);
推荐阅读
- c - WSAConnect - 远程服务器响应端口 80 和 443
- java - 为 FeignClient RetryableException 设置 HTTP 状态
- c# - datagridview 单元格相乘并求和文本框中的列
- service-reference - 服务引用上的 C# 中的 FakeItEasy
- linux - VS Code 无法正确响应 Linux Mint 中的键盘切换?
- java - 是否可以在没有嵌套循环的情况下读取整个 XML 文件
- css - 如何覆盖从 ui-include 生成的 div 类
- snowflake-cloud-data-platform - 通过 snlowsql 复制到命令时加载 csv 文件时出错
- php - 当 URl 存在时,Strrpos 无法正常工作
- java - spring boot - undertow https 会话不会过期或停止 ssl 握手