【问题标题】:Function execution is stopped in the middle函数执行中途停止
【发布时间】:2016-09-21 15:11:17
【问题描述】:

我编写中间件来检查每次调用的用户凭据。

因为它本来可以工作:我从用户那里获得了 ID 令牌。检查为谁创建了令牌。如果数据正确 - 我会保存它们以备将来使用。

middleware = function(req, res, next) {
  var storage = {};
  storage.ip = req.ip;
  storage.logged = false;
  storage.username = 'Guest';


  if(req.headers.authorization) {

    var base64Id = req.headers.authorization.split(' ');


    try {

      var decoded = jwt.verify(base64Id[1], app.get('salt'));
      console.log('decoded',decoded);

      Token.findOne({ jti: decoded.abc }, function(err, token) {
        if (err) {
          console.log(err);
        }

        if(token.browser !== req.headers['user-agent'] || req.ip !== token.ip) {
          console.log('incydent: niezgodność ip lub przeglądarki');
        } else {
          User.findOne({_id: token.iss}, function(err, user) {
            if(err) {
              console.log(err);
            }
            if(user.name === decoded.name) {
              console.log('data are correct');
              storage.username = user.name;
              storage.logged = true;
            } else {
              console.log('data are wrong');
            }
          });  

          console.log('next step');
        }

      });

    } catch(err) {
      if(err.name === 'TokenExpiredError') {
        token.deactivate();
      } else {
        console.log('ERROR!',JSON.stringify(err,null,4))
      }
    }

  } 
  req.storage = storage;
  next();
};

在控制台上,我的最后一行是“数据正确”,而console.log('next step'); 的行从未被执行过。控制台也不会抛出任何错误。

【问题讨论】:

  • 正确缩进代码总是有帮助的

标签: node.js mongodb express middleware


【解决方案1】:

Token.findOne 是一个异步函数(你给它一个回调)。

所以步骤是:

  • 输入中间件
  • 致电Token.findOne
  • 致电next(代码的最后一行)
  • 调用Token.findOne 的回调(但您的应用已经在下一个中间件中)

你应该:

  • next() 移动到您记录console.log('next step'); 的位置(并删除最后一行)
  • 在 catch 块中添加 next(err) 以在出现任何问题时传播错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    相关资源
    最近更新 更多