首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Express-JWT处理错误

如何使用Express-JWT处理错误
EN

Stack Overflow用户
提问于 2016-12-05 08:51:07
回答 5查看 18.8K关注 0票数 17

我正在尝试合并express-jwt库,但我不太明白它是如何处理错误的。

文档说:

错误处理 默认行为是在令牌无效时抛出错误,因此可以>添加自定义逻辑来管理未经授权的访问,如下所示:

代码语言:javascript
复制
    app.use(function (err, req, res, next) {
      if (err.name === 'UnauthorizedError') {
        res.status(401).send('invalid token...');
      }
    });

但我搞不懂这是怎么回事。如果我有一个简单的req res情况,如果令牌是有效的,我想调用next,或者如果没有调用错误调用next,那么将app.use函数放在哪里?

例如,下面是我的代码:

代码语言:javascript
复制
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验证。任何帮助都是非常感谢的。

EN

回答 5

Stack Overflow用户

发布于 2017-04-03 07:23:41

另一种方法是将中间件与app.use放在一起,以扫描头或查询字符串中有效的jwt的所有路由。任何公共端点都可以使用using关键字进行豁免。例如:

代码语言:javascript
复制
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();
});
票数 44
EN

Stack Overflow用户

发布于 2020-08-18 03:49:55

这是我对个别路线的解决办法。

代码语言:javascript
复制
function UseJwt(){
    return [
        jwtExpress({ secret: configuration.jwtSecret, algorithms: ['HS256'] }),
        function(err, req, res, next){
            res.status(err.status).json(err);
        }
    ]
}

使用..。

代码语言:javascript
复制
app.get(`/${prefix}/:user_id`,
        ...UseJwt(),
        async function (req, res) {           
           // handle your code here.
        }
)
票数 8
EN

Stack Overflow用户

发布于 2020-07-09 21:15:58

您可以在启动快递服务器所用的代码之前创建快速中间件。

代码语言:javascript
复制
// 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模板,则需要使用要显示给最终用户的数据填充模板,并将其余的数据记录在日志文件中。

代码语言:javascript
复制
app.use((err, req, res, next) => {
    res.locals.status = status;
    res.render('error')
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40970329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档