比如我要做一个博客详情页,我会查文章表,然后将文章标题、作者、内容render出去,这就完成了一个路由请求。但如果我想在同一个页面再显示文章点击量排行榜,就需要另一个查询,如何才能做到render两个或以上mongodb查询的内容?
欢迎选择我的课程,让我们一起见证您的进步~~
先定義兩個不同的查詢方法:
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}); })
你可以試試這種方法,我覺得可以滿足你的要求
樓主遇到的問題應該是進行了非同步的資料查詢,同時第二次查詢依賴第一次查詢結果。直接看代碼吧!
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 中介軟體
將每一步查詢出來的內容保存在同一個物件裡面,然後render出去就ok啦,很簡單撒!!
先定義兩個不同的查詢方法:
你可以試試這種方法,我覺得可以滿足你的要求
樓主遇到的問題應該是進行了非同步的資料查詢,同時第二次查詢依賴第一次查詢結果。直接看代碼吧!
以上程式碼主要使用 async 中介軟體
將每一步查詢出來的內容保存在同一個物件裡面,然後render出去就ok啦,很簡單撒!!