如何让Jade的外部JSON从Express渲染?

时间:2016-02-18 04:42:50

标签: javascript json node.js express pug

我是Node / Express的初学者,我想使用Jade和Express来提供我的静态文件。

以前我使用Jade结合gulp-jade和gulp-data,我可以渲染Jade文件并使用gulp-data,它有JSON文件来渲染每个页面。

index.jade + index.json会输出index.html

现在我遇到了如何使用Express将我的外部JSON文件包含到Jade中的麻烦。

例如:

server.js

app.get('/', function(req, res){
    res.render('pages/index', {pagetitle: 'Hello World'});
});

页/ index.jade

h2 #{pagetitle}

这将呈现给

<h2>Hello World</h2>

问题

我想将{pagetitle: 'Hello World'}替换为外部json文件,即index.json。我能这样做吗?

app.get('/', function(req, res){
    res.render('pages/index', 'folder_name/index.json');
});

这绝对是错的,对吧?

2 个答案:

答案 0 :(得分:3)

是的,这是错误的。这会将字符串本身设置为模型。您可能需要查看NodeJS的{{1}}模块。这将允许您读取文件的内容。然后,您可以解析JSON并将生成的对象作为模型发送到您的jade模板。

不要忘记异步读取您的JSON,否则您将阻止您的服务器。

https://nodejs.org/api/fs.html

下一步是创建一个负责读取此文件的模块,将其保存在内存中,并仅在使用观察器进行更改时重新加载。

答案 1 :(得分:1)

感谢@gretro的帮助。

我能够在你的帮助下解决我的问题。

这是我的解决方案:

var renderFromJson = function(json_path, renderTemplate) {
    fs.readFile(json_path, function(err, data) {
        renderTemplate(JSON.parse(data));
    })
}

app.get('/', function(req, res){
    renderFromJson('datas/index.json', function(json_data) {
        res.render('pages/index', json_data);
    });
});