12

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

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

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

   return next();
}

但是找不到任何关于如何最好地做到这一点的具体信息。

4

2 回答 2

9

您应该将错误传递给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):

所有这些都很好地记录在:http ://expressjs.com/guide/error-handling.html

于 2013-08-02T17:53:52.037 回答
2

没有什么可以阻止您使用响应对象:

res.send(401, "Tough luck buddy");
next('invalid user');
于 2014-01-31T20:00:24.387 回答