使用中间件进行错误处理

时间:2017-03-24 05:25:49

标签: javascript node.js express

我不时地学习节点。有这个问题。

中间件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)。现在我的问题是:

  • 我如何理解中间件2错误是从第一个中间件发出的?

2 个答案:

答案 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

一旦快速请求出错,它将跳过任何正常的中间件到下一个处理错误的中间件。

来源:https://expressjs.com/en/guide/error-handling.html