猿问

NodeJS Multer 无法捕获错误

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


Helenr
浏览 164回答 1
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);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答