Итерация коллекции Mongodb в шаблоне мопс / нефрит - PullRequest
0 голосов
/ 07 мая 2018

Как передать коллекцию MongoDB в шаблон .pug?

У меня есть эта функция, которая получает коллекцию mongodb с именем Test.

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

Как мне передать это в шаблон мопса? Я пытаюсь

| console.log(Test) в шаблоне мопса, но объект Test не существует.

У меня есть test.js и test.pug в моем каталоге. Я пытался найти свой вопрос, но большинство результатов было связано с использованием Express.js. Спасибо

1 Ответ

0 голосов
/ 07 мая 2018

Я не знаю, откуда вы взяли GetSort? или что такое Tailwater? и вы говорите, не используя Express (потому что function get(req, res){ res.send(..., конечно, выглядит как функция подписи Express, так что вы меня немного запутали.)

В любом случае, вот самый простой пример, который я мог бы привести без какого-либо намека на экспресс:

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 в браузер клиентов (что все-таки является экспрессом).

Я что-то пропустил?

...