搜尋

首頁  >  問答  >  主體

node.js - node+express的后台,ejs模版引擎,mongodb,在路由中如何把不同表的查询结果render出去?

比如我要做一个博客详情页,我会查文章表,然后将文章标题、作者、内容render出去,这就完成了一个路由请求。但如果我想在同一个页面再显示文章点击量排行榜,就需要另一个查询,如何才能做到render两个或以上mongodb查询的内容?

天蓬老师天蓬老师2784 天前621

全部回覆(3)我來回復

  • 伊谢尔伦

    伊谢尔伦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});
    })
    

    你可以試試這種方法,我覺得可以滿足你的要求

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦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 中介軟體

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 13:36:56

    將每一步查詢出來的內容保存在同一個物件裡面,然後render出去就ok啦,很簡單撒!!

    回覆
    0
  • 取消回覆