承诺和错误处理中间件
ExpressJS: Promises and Error Handling middleware
我定义了一些错误处理中间件和一个返回承诺的路由。但是当promise给出错误时,我必须在每个promise之后手动添加.catch(err => next(err))
。虽然这不是问题,但对于ExpressJs来说,查看路由是否返回承诺并自动调用错误处理中间件不是很明智吗?
我当前的缩短代码:
// 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
?
这已经被归档了。
我已经归档了一个重复的bug
到目前为止,最好的办法似乎是使用换行函数。
请参阅@robertklep的评论。如果不使用route-params
, promise-express-router
可能有用。express-co
似乎是一个wrap函数+更多基于生成器的优点
相关文章:
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 什么'在Express中路由时,应用程序级中间件和路由器级中间件之间的区别是什么
- Redux中间件在next()之前更改状态
- 快速的套接字 io 实例/中间件
- 如何使用Express'正确加载图像;s的静态中间件
- 如何在快递中制作中间件的动态链.js
- 在 Redux 中,在商店中应用中间件未正确称为化简器
- 意思是.JS中间件中的猫鼬填充不起作用
- "Cookies的这个实例“;在nodejs cookie中间件的源代码中
- Expressjs:如何跨路由共享路由中间件
- 如何在Keystone.js项目中使用Express.js中间件
- Express.js恶意路径中间件错误403
- 编写中间件'它不知道它在堆栈上的位置
- Router.use()需要中间件函数,但得到了一个未定义的函数
- webpack-dev中间件,如何在HMR失败时自动卸载
- 如何将快速路由处理传递给下一个中间件并破坏当前代码块
- 我的错误处理程序如何优先于早期的中间件
- Express.js:从路由处理程序中调用next(error)会调用全局错误处理中间件吗?
- 错误处理和404处理中间件的顺序
- 承诺和错误处理中间件