在Express.js中,如何在没有“响应”对象的情况下渲染Jade部分视图?

时间:2011-12-27 12:23:30

标签: node.js express pug

使用Express.js,我想将Jade模板的局部视图渲染为变量。

通常,您将局部视图直接渲染到响应对象:

response.partial('templatePath', {a:1, b:2, c:3})

但是,由于我在Socket.io服务器事件中,我没有“响应”对象。

是否有一种优雅的方法可以使用响应对象将Jade局部视图渲染到变量而不使用

2 个答案:

答案 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'});