我有一個mongodb數據庫,包含用戶和令牌列表。當我使用查詢findOne查詢時,它的返回值是undefined。對於findOne的代碼如下:節點js Mongodb findOne不工作同步
var getApiTokenForUser = function(user){
console.log('get api token for :'+user);
var collection = db.collection(user_token_collection_name);
var result;
if(collection){
console.log("cursor query: "+user);
var cursor = collection.findOne({'user':user});
console.log("cursor result: "+JSON.stringify(cursor));
}
return result;}
日誌,我打印的findOne是如下:
get api token for :Zeus
cursor query: Zeus
cursor result: {}
getApiTokenForUser return: undefined
但是,如果我用發現的,而不是findOne我可以得到用戶的名單,但只有在日誌,它仍然返回undefined。爲查找
代碼:
var getApiTokenForUser = function(user){
console.log('get api token for :'+user);
var collection = db.collection(user_token_collection_name);
var result;
if(collection){
console.log("cursor query: "+user);
var cursor = collection.find({'user':user});
cursor.forEach(function(data) {
result = data;
console.log("cursor result: "+JSON.stringify(data));
});
}
return result;}
和日誌:
cursor query: Zeus
getApiTokenForUser return: undefined
saveUserApiToken
cursor result: {"_id":"58a56442545e812a68f87bbe","user":"Zeus","token":"eyJhbGci
OiJIUzI1NiJ9.WmV1cw.mAQh65o-d2tOp_Fchi7iPm5pu_2f4QSXOAQ5JtoEe10"}
我想findOne同步工作。有什麼辦法嗎?
您能告訴我們getApiTokenForUser函數被調用的上下文嗎?在Node.js中,你不能讓'findOne'以同步方式工作,但是你可以使用'Promises'來做到這一點。 – chridam
我正在使用它來驗證用戶。當用戶登錄時,我將令牌和用戶保存在mongodb中,並且每次休息apis時,我正在使用該令牌檢查是否有效。 – ashwin1103
首先不要用node.js用戶同步字。想象一下你有1000個用戶正在實時使用你的網站的情況。事實上,您同時呼叫所有1000個用戶需要等待代碼執行完畢...以這種方式異步執行,其餘999個用戶可以繼續使用您的應用程序。 –