[英]Return all models from mongodb as an object or array?
我在mongodb中使用套接字,對於試圖創建新名稱的用戶,我需要檢查數據庫中的所有模型以查看其是否存在。
我做錯了所有事情,基本上我正在嘗試做這樣的事情。
var allUsers = [];
models.Message.find({}, function(err, data) {
for(var i=0; i < data.length; i++) {
allUsers.push(data[i].username);
}
});
console.log(allUsers)
我坐在這里努力甚至使allUsers
脫離功能,我想這甚至不是實現此目的的最佳方法。 對於allUsers
我只是要檢查數組中是否存在新的用戶名。
因此,為了進一步擴展我在這里所做的工作,是使用一些socket.io代碼。 如果我可以讓allUsers
正常工作,我將進行這樣的驗證。
socket.on('new user', function (data, callback) {
if(data in allUsers) {
callback(false);
} else {
callback(true);
socket.userName = data;
socket.connected = true;
users[socket.userName] = socket;
io.sockets.emit('user name', {usernames: users[socket.userName].userName, connected: users[socket.userName].connected});
}
});
但是,如果沒有成功,那就不好了。 所以我的問題是我提供的內容(socket.io,mongodb)如何獲取所有模型並驗證數據庫中是否存在傳入data
的新用戶?
models.Message.find
是異步的,異步操作的結果僅在異步操作完成后才可用。因此console.log(allUsers)
將始終生成一個空數組。
應該類似於(偽js代碼):
socket.on('new user', function (data, callback) {
models.User.findOne({username:data.username},function(err,user){
if(err){/*deal with error here */}
else if(user){/*username already taken
respond with appropriate socket message here */
socket.emit('user name already taken',{somemessage});
}
else{/* user with username not found */
/*create new user into database then emit socket message */
var user = new models.User(data);
user.save(function(err,user){
socket.emit('user name',{somemessage});
})
}
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.