我正在尝试合并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验证。任何帮助都是非常感谢的。
发布于 2017-04-03 07:23:41
另一种方法是将中间件与app.use放在一起,以扫描头或查询字符串中有效的jwt的所有路由。任何公共端点都可以使用using关键字进行豁免。例如:
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();
});发布于 2020-08-18 03:49:55
这是我对个别路线的解决办法。
function UseJwt(){
return [
jwtExpress({ secret: configuration.jwtSecret, algorithms: ['HS256'] }),
function(err, req, res, next){
res.status(err.status).json(err);
}
]
}使用..。
app.get(`/${prefix}/:user_id`,
...UseJwt(),
async function (req, res) {
// handle your code here.
}
)发布于 2020-07-09 21:15:58
您可以在启动快递服务器所用的代码之前创建快速中间件。
// Global error handler that takes 4 arguments and ExpressJS knows that
app.use((err, req, res, next) => {
res.status(err.status).json(err);
});
app.listen(3000);我将其用于应用程序,使用REST,但您可以使用相同的方法,并根据您的需要修改应该发生的事情。例如,如果使用Jade模板,则需要使用要显示给最终用户的数据填充模板,并将其余的数据记录在日志文件中。
app.use((err, req, res, next) => {
res.locals.status = status;
res.render('error')
});https://stackoverflow.com/questions/40970329
复制相似问题