私はユーザーとトークンのリストを持つmongodbデータベースを持っています。クエリを使用してfindOneにクエリを使用すると、その結果は未定義です。 findOneのためのコードは以下の通りである:私はfindOneのために印刷ノードjs Mongodb findOne not synchronous同期的に
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;}
ログ以下の通りです:
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にトークンとユーザーを保存しています。残りのapiごとにトークンが有効かどうかをチェックしています。 – ashwin1103
まず、node.jsで同期ワードをユーザーに使用しないでください。サイトをリアルタイムで使用している1000人のユーザーがいるとします。この呼び出しを同期して実行するということは、1000人のユーザー全員がコードが実行されるまで待つ必要があるということです。これを非同期的に実行すると、残りの999ユーザーは引き続きアプリケーションを使用できます。 –