我正在尝试合并express-jwt库,但我不太了解它的错误处理方式。
documentation说:
app.use(function (err, req, res, next) {
if (err.name === 'UnauthorizedError') {
res.status(401).send('invalid token...');
}
});
但是我对此感到困惑。如果我有一个简单的req
res
情况,并且我想在 token 有效的情况下调用next
,或者在 token 无效的情况下调用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
将来自我的数据库调用,而不是来自express-jwt验证。任何帮助表示赞赏。
最佳答案
另一种方法是,您可以将中间件放置在app.use中,以扫描所有路由,以便在 header 或查询字符串中查找有效的jwt。
任何公共(public)端点都可以使用except关键字免除。
前任:
app.use(expressjwt({credentialsRequired: true, secret: config.TOKEN_SECRET, requestProperty: 'user'}).unless({path: config.PUBLIC_URLs}));
app.use(function(err, req, res, next) {
if(err.name === 'UnauthorizedError') {
res.status(err.status).send({message:err.message});
logger.error(err);
return;
}
next();
});
关于node.js - 如何使用Express-JWT处理错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40970329/