【问题标题】:Express router with middleware error handling带有中间件错误处理的快速路由器
【发布时间】:2020-01-25 15:48:54
【问题描述】:

我有一个关于中间件错误处理的问题,特别是 multer。我有这条路线:

router.post('/', saveFile, (req, res, next) => {
    //rest of code
    })

然后我有 saveFile 中间件:

const multer = require('multer')
const storage = multer.diskStorage({
    destination: (req, res, cb) => {
        cb(null, './uploads/')
    },
    filename: (req, res, cb) => {
        cb(null, new Date().getTime() + '.jpg')
    }
})

const fileFilter = (req, file, cb) => {
    if (file.mimetype === 'image/jpeg') cb(null, true)

    cb(null, false)
}
const upload = multer({
    storage: storage,
    limits: {
        fileSize: 1024 * 1024 * 3 // up to 3 megabytes
    },
    fileFilter: fileFilter
})

const saveFile = upload.single('file')
module.exports.saveFile = saveAudio

我遇到的问题是,当我上传字段名称不是file 的文件时,我收到错误MulterError: Unexpected field。我想以某种方式捕捉到这个错误。但我什至不知道在哪里做。我该怎么做?

【问题讨论】:

  • 您似乎在这里定义了文件字段的预期名称:upload.single('file')?只需将名称“文件”更新为您所期望的即可。
  • 我知道。我正常使用时没有错误。我想捕获一个错误以防万一。

标签: express middleware multer express-router


【解决方案1】:

答案很简单,但没有人回答。

在设置 express 的 app.js 中,你可以制作一个中间件来处理错误

app.use((error, req, res, next) => errorHandlers(error, req, res, next))

最后放上来。

然后ErrorHandlers.js:

module.exports = function(error, req, res, next) {
    if (error.name === 'MulterError') {
        // handle error here
    } else {
        next()
    }
}

【讨论】:

    猜你喜欢
    • 2018-01-03
    • 2017-09-07
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    相关资源
    最近更新 更多