编辑
在cmets下面和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 等),然后 consolidate 将完成剩下的工作。
旧答案。
关于@Sergii 的回答,它对我没有 100% 的效果。
有时我正在使用的模板中会出现错误。但是有一条错误消息显示在此目录中查找此模板失败。
我尝试了@azariah 解决方案,但仍然无效。
app.set('view engine', 'pug'); // does not make sense.
app.set('view engine', 'ejs'); // overriding the last .set()
如前所述,对我有用的是使用 conolodate.js。
像往常一样添加app.set('view engine', 'pug');。
然后,在每次调用渲染时,我都会设置'view engine'。
像这样:
req.app.set('view engine', 'ejs');
res.render( 'theme', theme );
对此我担心的是,当更多同时用户访问具有不同引擎的页面时,不确定这是否会发生冲突并返回我遇到的错误查找。
但我猜渲染速度太快了,应该在另一个 req.app.set 被调用时完成。