已知并实现
- jade支持通过extend和block来进行模板嵌套
- express通过
app.set('view engine', 'jade');
来设定使用jade作为模板引擎 - respose输出时使用
res.reander('path/to/template.jade', {key:value});
实现
代码(省略无关内容)
#layout.jadedoctype 5html(lang="zh_CN") head title= title body section.content block content section.siteinfo block siteinfo
#page.jade,xxx.jadeextend layout block content p this is content #每个页面的内容都不一样 block siteinfo p this is my site info #全站一致,但是动态内容
#输出页面exports.viewpage = function(req, res){ var content = fs.readFileSync('path/to/file'); var siteinfo = getSiteInfo(); #获取动态内容 res.render('page', {content: content, siteinfo: siteinfo});};
问题描述
content不同的页面类型的数据不一样,所以在不同的请求具体处理中具体输出是没用问题的。但是siteinfo的内容全站都是一样的,但是是动态内容(所以我不能直接写在模板里面),如果像上面一样在每个页面输出处理中去获取并传递siteinfo感觉非常多余,所以我希望通过app.all('*', applySiteinfo);
这种方式来统一处理,同事不需要在res.render时做任何处理(就是也不通过res.set\res.get来传递数据),请问applySiteinfo中具体应该怎么处理?
已发现解决方法
- 使用
app.locals.relevant = applySiteinfo();
,applySiteinfo函数中直接使用jade.renderFile返回相应的HTML代码
不知道有没有更好的方式?
解决方案
app.use(function (req, res, next) { res.locals.xxxx = "hahahahah" next()})