在Express.js中,如何渲染不带“响应”对象的Jade局部视图?
使用Express.js,我想呈现从Jade模板的部分视图到variables。
通常,您直接向响应对象渲染部分视图:
response.partial('templatePath', {a:1, b:2, c:3})
但是,由于我在Socket.io服务器事件中,我没有“响应”对象。
有没有一种优雅的方式来呈现一个Jade的部分视图而不使用响应对象的variables?
您可以手动编译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'});
这是直接解决这个问题的快递3用户(现在应该广泛传播):
res.partial()已被删除,但是如果响应对象不是当前上下文的一部分,就像使用Liors情况一样,您可以始终使用app.render()使用callback函数 :
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()是快速应用程序对象的一个function,所以它很自然地知道configuration的模板引擎和其他设置。 它的行为与app.get()或其他快速请求事件上特定的res.render()方法相同。
也可以看看:
- http://expressjs.com/api.html#app.render for app.render()
- https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x for express 2.x> 3.x迁移目的