场景:我使用Node.js、Express + Handlebars作为视图引擎和MongoDB开发了一些事务性页面。
现在的问题是在模块集成期间,我得到了一些基于Express + Jade作为视图引擎的页面。
问题:如何集成基于Handlebars的页面和一些基于Jade的页面?
在你的app.js
var engine = require('consolidate');
app.engine('jade',engines.jade);
app.engine('车把',engines.handlebars);
更多信息在这里
Express 4.0 及更高版本的解决方案(直到再次更改)
NPM 安装你需要的引擎。
// some examples
npm install ejs
npm install pug
npm install handlebars
设置要在您的app.js
.
app.set('view engine', 'pug');
app.set('view engine', 'ejs');
渲染您的模板,请务必设置文件扩展名。
// forces usage of the respective render engine by setting the file extension explicitly.
res.render( 'about.ejs', { title: 'About' } );
res.render( 'about.pug', { title: 'About' } );
更多使用示例的文档。
编辑
在与 Amol M Kulkarni 下面的评论讨论之后,我又回来分析了这些。
事实证明,这比我想象的要容易得多,我必须回到这里分享我的解决方案。使用巩固,这样做:
首先做要求。
var engines = require('consolidate');
然后你可以删除或设置引擎并查看引擎......
我已经尝试删除所有app.engine
并且app.set('view engine', '...');
它确实有效。但是,将其设置为 not'html'
仅适用于一个引擎。所以我只是确定了它。
我已经这样设置了:
app.engine('html', engines.swig); // take note, using 'html', not 'ejs' or 'pug'..
app.set('view engine', 'html'); // also 'html' here.
然后稍后当您执行 . 时app.render
,只需确保它具有文件扩展名并且它会很好地工作。
res.render( 'theme.ejs', {}); // will render with ejs
res.render( 'theme.pug', {}); // will render with pug
只需确保安装了这些引擎(pug、ejs 等),然后 consolidate 将完成剩下的工作。
老答案。
关于@Sergii 的回答,它对我没有 100% 的作用。有时我正在使用的模板中会出现错误。但是有一个错误的错误消息说在这个目录中查找这个模板失败。
我尝试了@azariah 解决方案,但仍然没有用。
app.set('view engine', 'pug'); // does not make sense.
app.set('view engine', 'ejs'); // overriding the last .set()
如前所述,对我有用的是使用 consolodate.js。像往常一样
添加。
然后,在每次调用 render 时,我都会设置.app.set('view engine', 'pug');
'view engine'
像这样:
req.app.set('view engine', 'ejs');
res.render( 'theme', theme );
我对此的担忧是,当更多同时用户访问具有不同引擎的页面时,不确定这是否会发生冲突并返回我遇到的错误查找。
但我猜渲染速度太快了,应该在req.app.set
调用另一个渲染时完成。