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

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

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

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'}replace为一个外部的json文件,它是index.json。 我可以这样做吗?

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

这是绝对错误的,对吧?

是的,这是错的。 这将把string本身设置为模型。 你可能想看看NodeJS的fs模块。 这将允许您阅读文件的内容。 然后,您可以parsingJSON并将生成的对象作为模型发送到您的玉石模板。

不要忘记读取你的JSONasynchronous,否则你会阻止你的服务器。

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

下一步是创build一个负责读取该文件的模块,将其保存在内存中,并且只有在使用观察者更改时才重新加载。

感谢@gretro的帮助。

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

这是我的解决scheme:

 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); }); });