场景:我使用Node.js,Express + Handlebars作为视图引擎和MongoDB开发了一些交易页面。
现在的问题是在模块集成期间,我得到了一些构建在Express + Jade上作为视图引擎的页面。
问题:如何整合 Handlebars 上构建的网页&一些关于 Jade ?
答案 0 :(得分:20)
在 yourapp.js
中var engines = require('巩固');
app.engine('jade',engines.jade);
app.engine('handlebars',engines.handlebars);
更多信息here
答案 1 :(得分:13)
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' } );
更多用法示例的文档。
答案 2 :(得分:1)
编辑
在与Amol M Kulkarni讨论以下评论之后,我回来了并再次分析了这些评论。
事实证明,这比我想回到这里分享我的解决方案要容易得多。使用合并,执行以下操作:
首先执行需求。
var engines = require('consolidate');
然后,您可以删除或设置引擎并查看引擎...
我尝试删除所有的app.engine
和app.set('view engine', '...');
,它确实起作用了。但是,将其设置为'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等),其余的工作便由整合来完成。
旧答案。
关于@Sergii答案,它对我100%无效。
有时在我使用的模板中会引发错误。但是出现错误错误消息,提示无法在此目录中查找此模板。
我尝试了@azariah解决方案,但仍然无法正常工作。
app.set('view engine', 'pug'); // does not make sense.
app.set('view engine', 'ejs'); // overriding the last .set()
对我有用的是使用提到的consolodate.js。
照常添加了app.set('view engine', 'pug');
。
然后,每次调用渲染时,都要设置'view engine'
。
像这样:
req.app.set('view engine', 'ejs');
res.render( 'theme', theme );
我担心的是,当更多的同时用户访问具有不同引擎的页面时,不确定是否会发生冲突并返回我所遇到的错误查找。
但是我想渲染是如此之快,应该在调用另一个req.app.set
时完成。