Node.js异步一致性

时间:2013-08-25 13:04:48

标签: javascript node.js mongodb asynchronous

我有以下代码:

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

1 个答案:

答案 0 :(得分:0)

据我所知(至少在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();
    }
);

执行类似的操作,确保在使用users_db.set之前始终填充req.user.active。