使用Express.js,我想将Jade模板的局部视图渲染为变量。
通常,您将局部视图直接渲染到响应对象:
response.partial('templatePath', {a:1, b:2, c:3})
但是,由于我在Socket.io服务器事件中,我没有“响应”对象。
是否有一种优雅的方法可以使用响应对象将Jade局部视图渲染到变量而不使用?
答案 0 :(得分:14)
以下是 express 3 用户(现在应该广泛传播)的问题的直接解决方案:
res.partial()已被删除但您可以使用 app.render()使用回调函数,如果响应对象不是当前上下文的一部分,如Liors情况:< / p>
app.render('templatePath', {
a: 1,
b: 2,
c: 3
},function(err,html) {
console.log('html',html);
// your handling of the rendered html output goes here
});
由于app.render()是快速app对象的一个功能,因此它自然会知道配置的模板引擎和其他设置。它的行为与app.get()或其他快速请求事件上的特定res.render()相同。
另见:
答案 1 :(得分:13)
您可以手动编译Jade模板。
var jade = require('jade');
var template = require('fs').readFileSync(pathToTemplate, 'utf8');
var jadeFn = jade.compile(template, { filename: pathToTemplate, pretty: true });
var renderedTemplate = jadeFn({data: 1, hello: 'world'});