У меня есть база данных mongodb со списком пользователей и токенов. Когда я использую запрос для findOne с запросом, его возврат не определен. Код для 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 я могу получить список пользователей, но только в журналов, он все равно возвращает неопределенный.
код находки:
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 пользователей могут продолжать использовать ваше приложение. –