我不时地学习节点。有这个问题。
中间件1:
app.use(function(req, res, next) {
db.load(function(err, session) {
if (err) {
return next(err);
}
...
});
});
中间件2:
app.use(function(req, res, next) {
next();
});
路线处理程序
app.get('/', function(req, res, next) {
});
想象一下中间件1调用next(err)
。现在我的问题是:
答案 0 :(得分:0)
首先,中间件2在具有如下函数签名之前不会被调用: -
app.use(function(err,req, res, next){
// your code
})
您可以在中间件1中传递的错误对象中传递中间件名称
next({err:err,name:'middleware1'})
并在中间件2中访问名称
console.log(err.name)
答案 1 :(得分:0)
错误处理中间件可以通过在中间件而不是3中使用4个参数来完成。function(err, req, res, next)
例如,如果您只想打印出错误,可以创建一个像这样的新中间件:
function logErrors (err, req, res, next) {
console.error(err.stack)
next(err)
}
app.use(logErrors)
他们使用指示参数数量的length属性来检查函数的签名。例如:
function func1(a) {}
function func2(a, b) {}
console.log(func1.length) # 1
console.log(func2.length) # 2
一旦快速请求出错,它将跳过任何正常的中间件到下一个处理错误的中间件。