比如我要做一个博客详情页,我会查文章表,然后将文章标题、作者、内容render出去,这就完成了一个路由请求。但如果我想在同一个页面再显示文章点击量排行榜,就需要另一个查询,如何才能做到render两个或以上mongodb查询的内容?
伊谢尔伦2017-04-17 13:36:56
先定義兩個不同的查詢方法:
var findContent = function(db, callback) {
var cursor = db.collection('xxx').find({xx,xxx});
......(在这里边把content的查询结果放到变量里边)
}
var findRanking = function(db, callback) {
......(把ranking的查询结果放到变量里边)
}
MongoClient.connect(url, function(err, db) {
findContent(db, callback(){});
findRanking(db, callback(){});
})
router.get('/xxx', function(req, res, next) {
res.render('ejsFileName', {content: content, ranking: ranking});
})
你可以試試這種方法,我覺得可以滿足你的要求
伊谢尔伦2017-04-17 13:36:56
樓主遇到的問題應該是進行了非同步的資料查詢,同時第二次查詢依賴第一次查詢結果。直接看代碼吧!
var sql = 'xxxxxxx';
async.waterfall([function (cb) {
mysql.connection.query(sql, function (err, result) {
if (err) {
console.log(err);
throw err;
}
var response = [];
//此处省略数据处理逻辑
cb(null, response);
});
}, function (result, cb) {
async.eachSeries(result, function iterator(item, callback) {
var sql = 'x'x'x'x'x'x'x'x'x'x';
mysql.connection.query(sql, function (err, commentResult) {
if (err) {
console.log(err);
throw err;
}
var formatResult = [];
_.each(commentResult, function (item) {
// 省略处理逻辑
formatResult.push(item);
});
if (commentResult.length) {
//xxxxx 省略处理逻辑
}
callback();
});
}, function done(err) {
console.log("err: " + err);
cb(null, result);
});
}], function (err, results) {
cb(null, {
"msg": "查询成功",
"result": 1,
"data": results
});
});
以上程式碼主要使用 async 中介軟體