NodeJS、Mongo、Expressの新機能を使用しているので、簡単な質問のように思えます。私はと比較しようとしているNodejs、Express、Mongo:ループ内のコールバック関数が無視されています
着信データは、以下の構造を有する:データが入ってくるよう
key1: {value1} key2: {value2} key3: {value3}
私が何をしようとしているが、各キーを選択し、配列をループでありますmongoの "assets"コレクションでそのキーと一致するドキュメントを検索します。一致するものがある場合は、受信データの{value1}とmongo内の一致の{valueStored}を比較します。ここで
は私のコードです: `
app.all('/css', function(req, res, next) {
if (req.url === "/favicon.ico"){
res.sendStatus(200);
res.end();
}
var time = Math.floor(new Date()/1000);
var cssFiles = req["body"]["css_information"]["css"];
var collection = database.collection("assets");
for (key in cssFiles){
if (cssFiles.hasOwnProperty(key)){
console.log("key outside find(): "+key);
// key above is cycling through properly, but key inside find() is stuck on last one
// so it isn't cycling through properly, and only searches for the last one everytime.
database.collection("assets").find({"path":key}).sort({"timestamp_changed" : -1}).limit(1).toArray(function (err, docs){
console.log("--docs inside find(): "+JSON.stringify(docs[0], null,4));
console.log("key inside find(): "+key);
if (docs[0] != null){
// console.log(JSON.stringify(docs[0]["css"], null, 4));
var lastCSS = docs[0]["css"];
if(lastCSS !== cssFiles[key]){
database.collection("assets", function(err, col3) {
collection.updateOne({"parent":"css", "timestamp_changed":time, "path":key,"css":cssFiles[key]},
{$set:{"path":key} },
{upsert: true, multi: false});
// database.close();
});
}else{
console.log("no changes");
//end of if lastCSS === cssFiles[key] statement
}
}else{
console.log("Key: "+key);
database.collection("assets", function(err, col3) {
collection.updateOne({"parent":"css", "timestamp_changed":time, "path":key,"css":cssFiles[key]},
{$set:{"path":key} },
{upsert: true, multi: false});
});
//end of if (doc[0] != null) statement
}
//end of find() callback
});
}else{
console.log("cssFiles ¬hasOwnProperty(key)");
}
//end of for loop
}
res.status(200).json({data:"RETURN STATUS"}).end();
});
`
私は、コードを実行すると、それは次のように出力されます
key outside find(): themes/seven/reset.css
key outside find(): themes/seven/style.css
key outside find(): sites/all/modules/ctools/css/ctools.css
key outside find(): modules/dblog/dblog.css
key outside find(): modules/overlay/overlay-child.css
key outside find(): sites/all/modules/panels/css/panels.css
key outside find(): modules/system/system.base.css
key outside find(): modules/system/system.admin.css
key outside find(): modules/system/system.menus.css
key outside find(): modules/system/system.messages.css
key outside find(): modules/system/system.theme.css
key outside find(): sites/all/modules/date/date_api/date.css
key outside find(): modules/field/theme/field.css
key outside find(): modules/node/node.css
key outside find(): modules/search/search.css
key outside find(): modules/user/user.css
key outside find(): sites/all/modules/views/css/views.css
executed
key inside find(): sites/all/modules/views/css/views.css
key inside find(): sites/all/modules/views/css/views.css
key inside find(): sites/all/modules/views/css/views.css
key inside find(): sites/all/modules/views/css/views.css
key inside find(): sites/all/modules/views/css/views.css
key inside find(): sites/all/modules/views/css/views.css
key inside find(): sites/all/modules/views/css/views.css
key inside find(): sites/all/modules/views/css/views.css
key inside find(): sites/all/modules/views/css/views.css
key inside find(): sites/all/modules/views/css/views.css
key inside find(): sites/all/modules/views/css/views.css
key inside find(): sites/all/modules/views/css/views.css
key inside find(): sites/all/modules/views/css/views.css
key inside find(): sites/all/modules/views/css/views.css
key inside find(): sites/all/modules/views/css/views.css
key inside find(): sites/all/modules/views/css/views.css
key inside find(): sites/all/modules/views/css/views.css
私が見つける()コードを取得するにはどうすればよいです正しいキーを使用し、毎回最後のキーに固執しないでください。それとも私はこれに完全に間違ってアプローチしましたか?
PS:結果として、あなたのログは任意の合理的な順序であることを期待していない:それはどのくらいの時間に依存しますそれぞれの別の呼び出しに応答するためにDB/net /何にでもかかります! – dgiugg
私はキーワード 'let'の意味を理解していませんでした。私は同様のものを試してみましたが、もう一度 'var'を使っていましたが、明らかに何も変えていませんでした。 「let」をサポートしていないノードのバージョンもありましたので、私はそれを更新しました。 – winegums008
私は見る!私は、それが見つかったすべてのキーを比較する限り、その注文が重要ではないと思います。 find()は、ドキュメントが作成されるたびに挿入されるキー値のペアであるタイムスタンプ上でソートしているため、問題ではありません。また、私の評判は、私のアップヴォートのために低いです。でもありがとう :) – winegums008