首页 > 解决方案 > 处理 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 响应代码作为响应?

标签: node.jsexpresserror-handlingmiddlewaremulter

解决方案


推荐阅读