【问题标题】:Node.js async consistencyNode.js 异步一致性
【发布时间】:2013-08-25 13:04:47
【问题描述】:

我有以下代码:

server.use(function(req, res, next) {
    users_db.set(req.user, function(err) { // async call to mongodb
        if (err) {
          console.error(err);
        }
      });
    }
    return next();
});

server.get('/', function(req, res) {
    req.user.active = true; // this is a new field in user object
    res.send(req.user);
    }
});

所以,如您所见,当调用 users_db.set() 时,req.user 没有 active=true 字段。它仅被插入到server.get() 函数中。

由于调用的异步性质,user.active = true 是否有可能在数据库中注册?

【问题讨论】:

  • 可能是的,但不能保证。你想做什么?中间件可能是错误的工具。

标签: javascript node.js mongodb asynchronous


【解决方案1】:

据我所知(至少在 Express 中是这样的).get 方法接受许多中间件函数。所以我想以下方法会起作用:

server.get(
    '/', 
    function(req, res, next) {
        req.user.active = true; // this is a new field in user object
        res.send(req.user);
        next();
    },
    function(req, res, next) {
        users_db.set(req.user, function(err) { // async call to mongodb
            if (err) {
              console.error(err);
            }
          });
        }
        return next();
    }
);

做这样的事情,你可以确定 req.user.active 总是在到达 users_db.set 之前填充。

【讨论】:

  • 我明白了。我可以找到解决此问题的方法,只是想了解行为。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
  • 2014-06-13
  • 2015-02-23
  • 2011-07-05
  • 2021-09-03
  • 2016-02-22
  • 2015-07-05
相关资源
最近更新 更多