如何让外部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); }); });