Nodejs和Mongoose.模式.Find返回奇怪的对象



使用套接字。我想返回一个对象给用户,但由于某种原因,它返回了这个奇怪的对象,或者像它的find函数。

Object {options: Object, _conditions: Object, _updateArg: Object, op: "find"}

在我的app.js文件中查找组:

  socket.emit "getgroup", $(".user").attr("data-name")

然后在server.js中的node

  socket.on('getgroup', function (userid) {
    return io.sockets.emit('group', GroupModel.find({user:userid}));
  });

在这种情况下,它像预期的那样工作,返回所有的任务:

  socket.on('getall', function (socket) {
    return io.sockets.emit('getall', TaskModel.find());
  });

为什么我没有得到组模型对象?

您正在发送MODEL.find()的返回值,它是一个Query对象。因为Mongoose查询是异步的,所以它们不返回实际的查询结果,而是返回一个对象,您可以从中检索结果。

在你的例子中,你希望在发送消息之前等待查询返回:

socket.on('getgroup', function (userid) {
  GroupModel.find({user:userid}, function(err, results) {
    if (err)
      // handle error
    else
      io.sockets.emit('group', results);
  });
});

我不知道为什么你的其他查询(与TaskModel)工作,因为它的外观,它不应该(出于同样的原因:它返回一个Query对象;如果您想要该对象的结果,则需要首先对其调用.exec,或者像上面的示例一样,将回调函数传递给它)。

最新更新