Javascript My UserModel没有返回正确的用户数据查找id?

Javascript My UserModel没有返回正确的用户数据查找id?,javascript,mongoose,Javascript,Mongoose,这是我的代码: var user = UserModel.findOne({ _id: decodedToken.id, }, function (err, user) { if (err) return handleError(err) console.log('inside UserModel user = ', user) // this is what I want to return on the variable

这是我的代码:

var user = UserModel.findOne({ _id: decodedToken.id, }, function (err, user) {
                  if (err) return handleError(err)
                  console.log('inside UserModel user = ', user) // this is what I want to return on the variable user
                });

console.log("Outside userModel = ",user) // the user inside the findOne callback isn't assigned on the variable user?
在UserModel.findOne回调中,它返回正确的用户:

{ _id: 5979744a02bcec1dc873a96c,
  updatedAt: 2017-07-27T05:04:10.313Z,
  createdAt: 2017-07-27T05:04:10.313Z,
  fullName: 'kring kring',
  email: 'sofbaculio@gmail.com',
  password: '$2a$08$yiDO.HBGoieBApY8VCHA/Opp6PEpq7.CwZmfc2CkQmQoRfB/ySi4u',
  __v: 0,
  active: true }
但在回调之外,它返回如下内容:

 Query {
  _mongooseOptions: {},
  mongooseCollection:
   NativeCollection {
     collection: Collection { s: [Object] },
     opts: { bufferCommands: true, capped: false },
     name: 'user',

帮助?

这是因为您的函数实际上返回一个Mongoose查询,您可以稍后使用该查询调用exec方法并使用它获取结果

您现在需要执行该查询以获得结果:

user.exec(function(err,result){
   if(err)
      return console.log(err);
   console.log(result);
});

您可以阅读更多关于Mongoose@

查询的内容,问题是它是一个异步调用,因此在这种情况下,您必须实现一个承诺来实现这一点


另外,如果要在模型中使用mongo对象Id(即_Id)查找,那么应该使用UserModel.findById(decodedToken.Id),而不是UserModel.findOne({u Id:decodedToken.Id,}。只需尝试一下,下次当您想按对象Id查询集合时,只需选择Model.findById。这是一个很好的做法。希望能有所帮助。

好的,请逐个执行这些步骤。我正在尽最大努力帮助您

首先,您需要安装q库来实现承诺

npm安装q

    getUser(decodedToken.id).then(function(res){
    console.log(res);
    var user = res;
    //Just do it here what ever you want to do 
    },function(err){
    console.log(err)
    })

    //Here is your promise that you going to return
    function getUser(id) {
    return Q.Promise(function(resolve, reject) {
    UserModel.findById(decodedToken.id), function (err, user) {
                  if (err) return reject(err)
                  console.log('inside UserModel user = ', user)
                  resolve(user)
                });
     })
    }

它仍然是一样的,你能用我的代码回答吗?我在查询下面尝试了user.exec(),仍然不起作用。你运行exec时是否收到错误?它向控制台输出了什么?没有错误,但它返回以下内容:Promise{emitter:EventEmitter{domain:null,_events:{},_eventscont:0,_maxListeners:undefined},发出:{},结束:false}我尝试了var user=UserModel.findOne({u id:decodedToken.id,}).exec()仍然一样,在上面的语句使用
之后不工作。然后
,例如
UserModel.findOne({id:decodedToken.id,}).exec()。然后(函数(结果){});
。由于查询是异步的,因此在某个时候将处理传递给的函数时,它会返回一个承诺。我已经为您发布了一个代码,请检查它并尝试了解javascript承诺。什么是承诺以及它们是如何工作的。