在哈巴狗/玉石模板中迭代Mongodb Collection

时间:2018-05-07 15:55:07

标签: node.js mongodb pug

如何将MongoDB集合传递给.pug模板?

我有这个函数获取一个名为Test的mongodb集合。

function get(req, res) {
    mongo.GetSort({}, {state: 1, name: 1}, 'Test')
        .then(function (list) {
            res.send(list);
        });
 }

我如何将其传递给哈巴狗模板?我试着

在pug模板中

| console.log(Test)但对象Test不存在。

我的目录中有test.jstest.pug。我尝试搜索我的问题,但大多数结果都涉及使用Express.js。谢谢

1 个答案:

答案 0 :(得分:0)

我不知道你从哪里得到GetSort?或Tailwater是什么?并且你说没有涉及Express(因为function get(req, res){ res.send(...肯定看起来像签名表达功能,所以你让我有点困惑。)

无论如何,这是我能提出的最简单的例子,没有任何暗示:

const compiledFunction = require('pug').compileFile('template.pug');
require('mongodb')
  .connect('mongodb://localhost:27017/')
  .then(mongo=>{
    mongo
      .db('somedb')
      .collection('somecollection')
      .find({})
      .toArray()
      .then(list=> {
        // You just pass your data into the function
        const html = compiledFunction({list: list}); 
        console.log(html);
        mongo.close();
    });    
});

沿着这些方向template.pug

html
  head
    title something
  body
    each item in list
      div= item.title

事情是,表达最引人入胜。所以使用快递可能会使它更清洁。

因此,如果您有快递,则需要遵循文档:https://expressjs.com/en/guide/using-template-engines.html

app.set('view engine', 'pug'); //Tell express you want to use pug.

app.get('/', function (req, res) {
   const list = ... // 
   res.render('template', { list : list });
})

这将与上面的例子做同样的事情并且还将html发送到客户端浏览器(毕竟这是表达的东西)。

我错过了什么吗?