希望这是一个简单的,但我有一些自定义中间件,我想向用户返回404或401等,并停止传播其他处理程序等。
我期待我可以做类似的事情:
function SomeMiddleware(req, res, next) {
if(user.notRealOrSomething)
{ throw new HttpException(401, "Tough luck buddy"); }
return next();
}
但无法找到有关如何最好地执行此操作的任何具体信息。
答案 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):
答案 1 :(得分:1)
没有什么可以阻止您使用响应对象:
res.send(401, "Tough luck buddy");
next('invalid user');