我正在尝试合并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/

10-15 14:36