我定义了一些错误处理中间件和一个返回 promise 的路由。但是当那个 promise 出错时,我必须在每个 promise 之后手动附加 .catch(err => next(err))
。虽然这不是问题,但 ExpressJs 是否明智地查看路由是否返回 promise ,如果是,则自动调用错误处理中间件。
我当前的缩短代码:
// errorHandlers.js
function sequelizeValidationError (err, req, res, next) {
if (err.name && err.name == 'SequelizeValidationError')
res.status(400).send(err.errors)
else next(err)
}
// auth.js
router.post ('/register', middleware.isNotAuthenticated, (req, res, next) => {
const { email, password, name } = req.body;
return models.User.find({where : { email }}).then(user => {
if (user) {
if (user.password == password) sendToken(user.id, res);
else res.sendStatus(401);
} else {
return models.User.create({
email, password, name
}).then(user => {
sendToken(user.id, res);
})
}
}).catch(next)
})
// index.js
router.use('/auth', require('./auth'))
router.use(errorHandlers.sequelizeValidationError)
例如,目前我可能忘记在一个地方编写 catch
并且服务器会失败。
我是不是错过了什么?如何避免每次都输入 catch
?
最佳答案
这是 already filed .
我已经提交了 duplicate bug
到目前为止,最好的选择似乎是使用 wrap function .
另请参阅上面@robertklep 的评论。 promise-express-router
如果您不使用 route-params
可能会有用。 express-co
似乎是一个包装函数 + 更多基于生成器的优点
关于javascript - ExpressJS : Promises and Error Handling middleware,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38080111/