node.js - 处理 multer 抛出的错误
问题描述
我有 multer 中间件来处理文件上传。我的代码看起来像这样。
const upload = require('./uploadMiddleware');
router.post('/support/case', setUserAuth, upload, async (req, res) => {
try {
validatePayload(req.body.payload);
} catch (error) {
return res.status(400).send({
error: 'Error in validating payload'
});
}
dosomeProcessing(req.body.payload);
return res.send(200);
})
function validatePayload(paylod) {
if(!payload.type || payload.type!=='XYZ'){
throw new Error(`Invalid type ${payload.type}`);
}
}
uploadMiddleWare.js
const multer = require('multer'),
{ memoryStorage } = multer,
path = require('path'),
VALID_FILE_EXTENSIONS = ['.tar', '.zip', '.jpg', '.gif', '.png'];
const upload = multer({
storage: memoryStorage({}),
fileFilter: function(req, file, cb) {
const fileExtension = path.extname(file.originalname).toLowerCase();
if (VALID_FILE_EXTENSIONS.includes(fileExtension)) {
return cb(null, true);
}
return cb(new Error(`Invalid file extension ${fileExtension} provided`));
}
}).array('fileUploader', 3);
module.exports = upload;
根据我的代码逻辑,如果输入中发生任何错误,我会发回 400 响应代码。但是,现在如果在这种情况下发生任何 multer 验证错误,如果遇到任何无效的文件扩展名或上传超过 3 个文件,那么我会收到 500 错误代码。我相信它默认的快速错误处理。有没有办法优雅地处理错误并发送 400 响应代码作为响应?
解决方案
推荐阅读
- python - Python 空请求响应处理
- gremlin - gremlin 与 `select` 和 `as` 的交集
- c# - 如何从 Challenge() 获取重定向 url
- html - 在不在的表单上使用 ruby mechanize
- python - 如何在 PyQt5 中保持行和列大小与网格布局相同?
- javascript - Bootstrap 5 - 使侧边栏尺寸与导航栏品牌一致
- python - 是什么导致 Catboost.select_features 图中显示的指标与拟合的最终模型的实际预测之间存在这种差异?
- mips - MIPS - 如何在 .data 部分中指定不同地址的单词?
- swiftui - SwiftUI 工作表无限循环?
- sql - 为什么运行小型、半频繁的插入作业时,我的 Postgresql 查询性能在 10 亿行表上会受到影响?