如何将数据从db注入到jade模板中?

时间:2014-03-05 16:18:48

标签: mongodb express pug

我正在尝试将数据从mongodb导入 jade 模板,以便在图表中显示它们。我正在使用 chart.js 内联脚本,以便在图表上呈现数据。所以来自Mongodb的数据在页面上,我可以像这样访问它:

each city in cities
    p #{city.name}

以下是我将数据传递到页面的方式:

exports.index = function(req,res){
    var cities = City.find({}).limit(20);
    cities.exec(function(err,doc) {
        res.render("index",{cities:doc});
    });
};

我用 php 创建了相同的应用,只需将数据传递到页面并将数据注入javascript图形( with json_encode

Here is final result with php:

很简单,因为 php 数据是HTML页面的全局数据。如何用 Jade

来做到这一点

由于

1 个答案:

答案 0 :(得分:2)

啊,所以你的目标是既使用城市数据在服务器上生成HTML,又使其在浏览器中作为原始javascript对象数据使用。为此,您将其格式化为JSON并将其填充到<script>标记中。有一些模块可以帮助解决这个问题,例如sharify, 但是你的玉器模板中的基本思想是这样的:

在快递路线处理程序中javascript:

exports.index = function(req,res){
    var cities = City.find({}).limit(20);
    cities.exec(function(err,doc) {
        //There are tricky rules about safely embedding JSON within HTML
        //see http://stackoverflow.com/a/4180424/266795
        var encodedCityData = 'window.cities = ' + JSON.stringify(cities)
            .replace(/</g, '\\u003c')
            .replace(/-->/g, '--\\>');
        res.render("index",{cities:doc, encodedCityData: encodedCityData});
    });
};

在您的玉石模板中:

script!= encodedCityData

在浏览器中,您可以通过已设置到cities对象的window变量访问数据。

相关问题