节点Js和Mongoose。 Model.find返回奇怪的对象

时间:2013-04-06 09:01:26

标签: node.js socket.io mongoose

我使用socket.io作为Web应用程序。我想将一个对象返回给用户但由于某种原因它返回这个奇怪的对象,或者像它的find函数一样。

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

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

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

然后在节点

中的server.js中
  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());
  });

为什么我没有收回群组模型对象?

1 个答案:

答案 0 :(得分:2)

您发送的回复值为MODEL.find(),即Query object。因为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,或者像上面的例子中那样,给它传递一个回调函数。)