0

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

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

4

1 回答 1

2

您正在发送 的返回值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);
  });
});

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

于 2013-04-06T11:00:18.633 回答