为了账号安全,请及时绑定邮箱和手机立即绑定

NodeJS Multer 无法捕获错误

NodeJS Multer 无法捕获错误

Helenr 2023-07-29 16:35:01
如何捕获调用的错误并返回 res 状态消息?我无法捕获 userController.uploadFile 中的任何错误,并且如果我尝试在 paths.post 中执行 upload(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);
查看完整描述

1 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

我认为我们可以通过一些调整来使其发挥作用。我已经进行了这些更改并用一些图像进行了测试。


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


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


查看完整回答
反对 回复 2023-07-29
  • 1 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信