如何同时查找和显示两个集合中的数据?

时间:2018-07-12 08:02:07

标签: node.js express mongoose express-handlebars

我正在制作一个节点应用程序,其中存储了两个集合,我需要遍历每个集合的所有文档,然后将其传递到车把以呈现每个文档。只有一个文档正在渲染,而另一个则没有。我正在使用express-handlebars渲染前端。

以下是把手的相关代码:

<div class="tc">
  <ul>
    {{#each drop}}
    <li>{{teamName}} : {{totalScore}} Points <span><i class="fas fa-pen"></i></span></li>
    {{/each}}
  </ul>
  <ul>
    {{#each pass}}
    <li>{{teamName}} : {{totalScore}} Points <span><i class="fas fa-pen"></i></span></li>
    {{/each}}
  </ul>
</div>

我在服务器端尝试了两件事:

1)错误:设置标头后无法设置标头。

app.get('/history', (req, res) => {
  Drop.find()
    .sort({
      totalScore: 'desc'
    })
    .then(drop => {
      res.render('history', {
        hideFooter: false,
        drop: drop
      });
    })
  Pass.find()
    .sort({
      totalScore: 'desc'
    })
    .then(pass => {
      res.render('history', {
        hideFooter: false,
        pass: pass
      });
    })
});

2)前端只渲染通行证,不掉落不渲染。

app.get('/history', (req, res) => {
  Drop.find()
    .sort({
      totalScore: 'desc'
    })
    .then(drop => {
      Pass.find()
        .sort({
          totalScore: 'desc'
        })
        .then((pass, drop) => {
          res.render('history', {
            hideFooter: false,
            pass: pass,
            drop: drop
          });
        })
    });
});

更新:我也尝试过async.parallel

var async = require('async');

async.parallel([
  Drop.find()
  .sort({
    totalScore: 'desc'
  }),
  Pass.find()
  .sort({
    totalScore: 'desc'
  })
], function(results) {
  res.render('history', {
    hideFooter: false,
    pass: pass,
    drop: drop
  });
});

1 个答案:

答案 0 :(得分:1)

问题可能出在您在第二个Promise中添加的drop参数,请尝试将其删除

app.get('/history', (req, res) => {
  Drop.find()
    .sort({
      totalScore: 'desc'
    })
    .then(drop => {
      Pass.find()
        .sort({
          totalScore: 'desc'
        })
        .then(pass => {
          res.render('history', {
            hideFooter: false,
            pass: pass,
            drop: drop
          });
        })
    });
});