在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 调用错误处理中间件。至于如何判断一个中间件是不是错误处理中间件?
守着一只汪
TA贡献1872条经验 获得超3个赞
Express 会对中间件 fn 的参数个数进行判断,如果参数个数不等于 4 则认为不是错误处理中间件,则继续调用next(err)
,这样就会进入到下一个中间件函数,继续进行参数个数判断,如此方式一直到某个中间件函数的参数个数是 4,就认为找到了错误处理中间件,然后执行此中间件函数。
另外,使用 try catch 会不会触发错误处理中间件取决于你是否调用 next(err)
。
- 2 回答
- 0 关注
- 919 浏览
添加回答
举报
0/150
提交
取消