我正在尝试合并express-jwt库,但我不太明白它是如何处理错误的。如何使用Express-JWT处理错误
错误处理
的默认行为是当令牌无效抛出一个错误,这样你就可以>添加自定义逻辑如下管理未经授权的访问:
app.use(function (err, req, res, next) {
if (err.name === 'UnauthorizedError') {
res.status(401).send('invalid token...');
}
});
但我很困惑如何工作。如果我有一个简单的req
res
的情况,并且我想拨打next
如果令牌有效,或者拨打电话next
带有错误,如果不是,我在哪里放那个app.use
函数?
举例来说,这里是我的代码:
router.post('/', expressJwt({
secret: jwtSecret,
credentialsRequired: false
}), (req, res, next) => {
databaseController.findUser(req.user.email, (err, user) => {
if (err) {
return next(err)
}
res.json(user)
})
})
这里的err
将来自我的DB调用,而不是从快递,智威汤逊验证。 任何帮助表示赞赏。
如果你考虑的代码'快车jwt' https://github.com/auth0/express-jwt/blob/master/lib/index.js#L51,你会发现它使用'next(err)'和'next'将请求传递给错误处理程序或请求处理程序。 –
所以我不清楚,'next'传递给'expressJwt'函数在哪里? – Startec
在L33上,'middleware'函数具有签名'函数(req,res,next)'。在L130上,返回“中间件”。因此,当您在路由器中传递'expressJwt({})'时,它会返回一个接受快递'req','res'和'next'的函数(req,res,next)。希望对你很清楚:) –