Javascript 使用特定http状态退出express中间件

Javascript 使用特定http状态退出express中间件,javascript,node.js,express,http-status-codes,middleware,Javascript,Node.js,Express,Http Status Codes,Middleware,希望这是一个简单的,但我有一些自定义中间件,我想返回404或401等给用户,并停止传播其他处理程序等 我希望我能做一些类似的事情: function SomeMiddleware(req, res, next) { if(user.notRealOrSomething) { throw new HttpException(401, "Tough luck buddy"); } return next(); } 但是,找不到有关如何最好地执行此操作的任何特定信息。您应该将错误

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

我希望我能做一些类似的事情:

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

   return next();
}

但是,找不到有关如何最好地执行此操作的任何特定信息。

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

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

   next();
}
传递给
next
的任何参数都将被视为错误,除非
'route'
会跳到下一个路由

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

function (err, req, res, next) {
  // err === your HttpException
}
Express.js将任何具有4个参数的中间件视为错误中间件

错误处理中间件的定义与常规中间件一样,但是必须使用4的算术数来定义,即签名(err、req、res、next):


所有这些都在以下位置得到了很好的记录:

没有任何东西可以阻止您使用响应对象:

res.send(401, "Tough luck buddy");
next('invalid user');

这在express 4中对我不起作用,它仍然返回500状态,并且似乎忽略了res数据这在更改res.status(401).send()后对我起作用;返回下一个(“无效用户”);