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

Lio*_*man 13 node.js express pug

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

通常,您将部分视图直接呈现给响应对象:

response.partial('templatePath', {a:1, b:2, c:3})
Run Code Online (Sandbox Code Playgroud)

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

有没有一种优雅的方法可以在使用响应对象的情况下将Jade部分视图呈现给变量?

mat*_*ias 14

以下是快递3用户的这个问题的直接解决方案(现在应该广泛传播):

res.partial()已被删除,但您可以使用回调函数始终使用app.render(),如果响应对象不是Liors情况下的当前上下文的一部分:

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
});
Run Code Online (Sandbox Code Playgroud)

由于app.render()是快速app对象的一个​​功能,因此它自然会知道配置的模板引擎和其他设置.它的行为与app.get()或其他快速请求事件上的特定res.render()相同.

也可以看看:


sta*_*er2 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'});
Run Code Online (Sandbox Code Playgroud)

  • 工作完美,谢谢!我使用以下方法解析pathToTemplate:var pathToTemplate = require('path').resolve(__ dirname,'../views')+ templateName +'.jade'; (2认同)