async モジュールを使用して、Node.js に固有の「コールバック地獄」を削減しようとしています。基本的にasync.series
、データベースから情報を取得してビューに表示するために使用しようとしています。それでも、私の見解では結果が得られません。
これは私がこれまでに持っているコードです:
// Search
exports.search = function(req, res) {
var x = [];
async.series([
function(cb) {
Lang.find({ lang: req.query.keyword }).sort({ verbal: -1 }).exec(function(err, langs) {
cb(null, langs);
});
},
function(cb) {
Human.find({}, function(err, humans) {
cb(null, humans);
});
}],
function(err, results) {
if (err) {
res.send(500);
}
for(var i = 0; i < results[0].length; i++) {
for(var j = 0; j < results[1].length; j++) {
if(results[1][j]._id == results[0][i].human) {
x.push(results[1][j]);
}
}
}
res.render('myView', { title: 'Search Results', humans: x });
}
);
}
まず、Lang モデル (MongoDB) にクエリを実行し、一致するレコードを見つけたいと考えていますreq.query.keyword
。その後、Human モデルにクエリを実行し、その特定の言語スキルを持つすべての Human を見つけたいと考えています。また、FOR ループは、人間が複数の言語を持っている可能性があるため、配列から重複を排除することを目的としています。