求问node express 捕获错误的机制

在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');
});


陪伴而非守候
浏览 920回答 2
2回答

红颜莎娜

我们来看下文档:如果将任何项传递到 next() 函数(除了字符串 'route'),那么 Express 会将当前请求视为处于错误状态,并跳过所有剩余的非错误处理路由和中间件函数。因此示例代码里调用 next(err) 将使得 Express 调用错误处理中间件。至于如何判断一个中间件是不是错误处理中间件?

守着一只汪

Express 会对中间件 fn 的参数个数进行判断,如果参数个数不等于 4 则认为不是错误处理中间件,则继续调用next(err),这样就会进入到下一个中间件函数,继续进行参数个数判断,如此方式一直到某个中间件函数的参数个数是 4,就认为找到了错误处理中间件,然后执行此中间件函数。另外,使用 try catch 会不会触发错误处理中间件取决于你是否调用 next(err)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Node.js