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

时间:2013-08-02 12:55:19

标签: 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();
}

但无法找到有关如何最好地执行此操作的任何具体信息。

2 个答案:

答案 0 :(得分:5)

您可能会将错误传递给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的arity定义,即签名(err,req,res,next):

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

答案 1 :(得分:1)

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

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