从具有特定http状态的快速中间件退出

Gro*_*fit 7 javascript middleware http-status-codes node.js express

希望这是一个简单的程序,但是我有一些自定义的中间件,我想将404或401等返回给用户,并阻止其他处理程序等的传播。

我期待我可以做类似的事情:

function SomeMiddleware(req, res, next) {
   if(user.notRealOrSomething)
   { throw new HttpException(401, "Tough luck buddy"); }

   return next();
}
Run Code Online (Sandbox Code Playgroud)

但是找不到最佳方法的任何特定信息。

Pic*_*els 6

您应该将错误传递给该next()函数。

function SomeMiddleware(req, res, next) {
   if(user.notRealOrSomething) {
    return next(throw new HttpException(401, "Tough luck buddy")); 
   }

   next();
}
Run Code Online (Sandbox Code Playgroud)

您传递给任何参数的都next将被视为错误,但'route'会跳至下一条路线。

当next出现错误时,将执行错误中间件。

function (err, req, res, next) {
  // err === your HttpException
}
Run Code Online (Sandbox Code Playgroud)

Express.js会将带有4个参数的任何中间件视为错误中间件。

错误处理中间件的定义与常规中间件一样,但是必须定义为4(即签名(err,req,res,next)):

所有这些都在以下位置有很好的记录:http : //expressjs.com/guide/error-handling.html

  • 这个答案在十年前是错误的,现在仍然是。它会起作用,但解释被误导了:如图所示的函数在错误情况下根本不会调用“next()”,因为它会在评估参数时抛出异常并在调用“next()”之前退出)` 函数。 (2认同)