Node.js 在Express.js中,如何在不使用“Jade”的情况下渲染Jade局部视图;回应";对象

Node.js 在Express.js中,如何在不使用“Jade”的情况下渲染Jade局部视图;回应";对象,node.js,express,pug,Node.js,Express,Pug,使用Express.js,我想将部分视图从Jade模板渲染为变量 通常,将局部视图直接渲染到响应对象: response.partial('templatePath', {a:1, b:2, c:3}) 但是,由于我在Socket.io服务器事件中,所以没有“response”对象 有没有一种优雅的方法可以在不使用响应对象的情况下将Jade局部视图渲染为变量?您可以手动编译Jade模板 var jade = require('jade'); var template = require('fs

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

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

response.partial('templatePath', {a:1, b:2, c:3})
但是,由于我在Socket.io服务器事件中,所以没有“response”对象


有没有一种优雅的方法可以在不使用响应对象的情况下将Jade局部视图渲染为变量

您可以手动编译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'});

以下是针对express 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
});
由于app.render()是express app对象的函数,因此它自然知道已配置的模板引擎和其他设置。它的行为方式与app.get()或其他express请求事件上的特定res.render()相同

另见:

  • 对于app.render()
  • 用于express 2.x>3.x迁移目的

非常好用,谢谢!我使用以下内容解析pathToTemplate:var pathToTemplate=require('path')。解析(uu dirname,../views')+模板名+'.jade';非常感谢你!我在尝试拟合一个部分时遇到了这个问题,而你的答案是谷歌的第一个结果。你这个摇滚人!这个答案是正确的,但是如果您想使用缓存机制,只需重新使用
jadeFn
(例如在一个循环中),它就会利用缓存的模板。由于使用了缓存,这种方法更好吗?A我说得对吗@如果我错了,matthias会纠正我??据我记忆所及,(编译的)jade模板缓存在生产环境下(NODE_ENV=“production”),所以这是真的。另一方面,使用@emostars manual read from fs and compile方法,您可以灵活地自行控制缓存行为,例如重用
jadeFn
,而无需重新读取或重新编译原始jade模板字符串。