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

求问node express 捕获错误的机制

求问node express 捕获错误的机制

陪伴而非守候 2019-03-16 19:10:18
在express生成的标准模板中,发生错误(404和其他错误)时,为什么会执行以下代码?当使用try catch时,catch会触发通用的error handler方法?// catch 404 and forward to error handler app.use(function(req, res, next) {     var err = new Error('Not Found');     err.status = 404;    next(err); }); // error handler app.use(function(err, req, res, next) {     // set locals, only providing error in development     res.locals.message = err.message;     res.locals.error = req.app.get('env') === 'development' ? err : {};     // render the error page     res.status(err.status || 500);     res.render('error'); });
查看完整描述

2 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

我们来看下文档:

如果将任何项传递到 next() 函数(除了字符串 'route'),那么 Express 会将当前请求视为处于错误状态,并跳过所有剩余的非错误处理路由和中间件函数。

因此示例代码里调用 next(err) 将使得 Express 调用错误处理中间件。至于如何判断一个中间件是不是错误处理中间件?

查看完整回答
反对 回复 2019-03-16
?
守着一只汪

TA贡献1872条经验 获得超3个赞

Express 会对中间件 fn 的参数个数进行判断,如果参数个数不等于 4 则认为不是错误处理中间件,则继续调用next(err),这样就会进入到下一个中间件函数,继续进行参数个数判断,如此方式一直到某个中间件函数的参数个数是 4,就认为找到了错误处理中间件,然后执行此中间件函数。

另外,使用 try catch 会不会触发错误处理中间件取决于你是否调用 next(err)


查看完整回答
反对 回复 2019-03-16
  • 2 回答
  • 0 关注
  • 919 浏览

添加回答

举报

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