84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
比如我要做一个博客详情页,我会查文章表,然后将文章标题、作者、内容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啦,很简单撒!!