3

我在 mongodb 数据库中有一些数据,并希望在加载主页时将其传递给主干集合。这样做的一种方法是设置这样的节点路由:

exports.index = function(req, res){

  db.users.find(function(err, docs) {
    var docs_string = JSON.stringify(docs);
    res.send(docs_string);
  };
};

但这不起作用,因为它不会渲染我的玉模板,它会拉入主干代码,它只是以纯文本形式显示 JSON。

或者,我可以渲染我的翡翠模板,将数据作为变量传递给翡翠:

exports.index = function(req, res){

  db.users.find(function(err, docs) {
    var docs_string = JSON.stringify(docs);
    res.render('index', {
      title: "Data",
      docs_string: docs_string
    })
  });
};

然后在翡翠模板中,有一个这样的脚本来将用户添加到我的用户集合中:

script
  var docs = !{docs_string};
  var users = new app.Users();
  _.each(docs, function(doc) {
      var user = new app.User(doc);
      users.add(user);
  })

但这似乎是错误的,因为我真的不想将数据传递给玉模板,我想将它传递给骨干集合。此外,使用此解决方案,我不知道如何将下划线模板(在事物的主干端)包含到由服务器端的翡翠呈现的页面中。

将数据从节点服务器传递到骨干集合的标准方法是什么?

4

2 回答 2

1

假设您的数据是一个对象,您应该使用 JSON.stringify() 将其转换为字符串,然后在脚本标签内插入页面,因此您生成的 HTML 看起来像这样(我不使用 Jade):

<script>
    var data = {...}; // in template instead of {...} here should be the instruction to insert your json string
</script>

然后当页面加载时,您的脚本将被执行,并且数据将作为浏览器中的全局变量提供,因此您可以使用它来初始化主干集合。这一切都是一个好主意,仅在第一个页面加载时引导您的数据(以避免额外的请求),然后使用 API 为该页面和其他页面请求数据。

于 2013-05-08T18:14:15.847 回答
0

查看 Steamer,这是一个为此目的而制作的微型节点/快速模块。

https://github.com/rotundasoftware/steamer

于 2014-01-23T18:41:43.320 回答