【问题标题】:NodeJS Multer unable to catch eroorNodeJS Multer 无法捕获错误
【发布时间】:2021-02-25 05:43:47
【问题描述】:

如何捕获调用的错误并返回 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);

【问题讨论】:

    标签: javascript node.js multer


    【解决方案1】:

    我认为我们可以通过一些调整来实现它。我进行了这些更改并用几张图片进行了测试。

    您的用户控制器看起来会有些不同,但这样的东西应该可以工作。

    我已更新将任何文件太大的错误传递给控制器​​,这将在 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);
    

    【讨论】:

    • 谢谢,但是我如何在我的 userController.uploadFile 上发现错误?向前端发送 res 消息。
    • 哦,是的,感谢您的更新。我将更改我的答案以包含此内容。
    • 谢谢! :D 很抱歉打扰,但你知道我应该如何捕捉文件大小限制错误吗?
    • 我一定会看看并回复你!
    • 我已经更新了解决文件大小限制错误的答案!
    猜你喜欢
    • 2020-04-06
    • 2016-02-02
    • 2015-12-02
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    相关资源
    最近更新 更多