2013-04-06 57 views
0

我使用一个web应用程序的socket.io。我想返回一个对象给用户,但由于某种原因它返回这个奇怪的对象,或者像它的find函数一样。Nodejs和Mongoose。 Mode.find返回奇怪的对象g

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

在我的app.js文件中寻找组:在节点

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

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

然后在server.js凡在此情况下,它的工作原理是预期,返回所有任务:

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

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

+0

问题是什么?你能向我们展示返回对象的JSON表示吗? – 2013-04-06 09:15:21

+0

我想知道为什么我没有找回模型? { “选项”:{ “填充”:{}}, “_条件”:{}, “_ updateArg”:{}, “OP”: “发现”} – Harry 2013-04-06 09:24:07

回答

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,或者像上面的例子那样,传回一个回调函数功能)。