0

我有以下代码:

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由于调用的异步性质,是否有可能在数据库中注册?

4

1 回答 1

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();
    }
);

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

于 2013-08-25T13:19:07.007 回答