2013-04-06 47 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,或者像上面的例子那樣,傳回一個回調函數功能)。