我正在使用带有express和ejs的node.js.
我应该将我的网站从ejs移动到另一个模板引擎 - dust.js.我希望能够将模板从一个模板引擎逐个移动到另一个模板引擎。我看到的问题是两者都覆盖了res.render方法。
我能想到的解决方案是在需要ejs之后但在需要dust.js之前存储res.render var render_ejs = res.render;
。然后在需要dust.js之后 - 以不同的名称res.render_dust = res.render
存储新渲染并再次使用ejs覆盖渲染res.render = dust.render
。
让他们并肩生活的正确方法是什么?
答案 0 :(得分:0)
这是一个关于如何并排使用两个引擎的简单示例(我正在使用Jade,因为Dust给了我一些关于require.paths
的悲伤):
var express = require('express');
var app = express();
app.engine('ejs', require('ejs').__express);
app.engine('jade', require('jade').__express);
app.set('views', __dirname);
app.get('/', function(req, res) {
// Render with Jade: res.render('index.jade');
// Render with EJS: res.render('index.ejs');
});
app.listen(3012);
所以诀窍是使用render()
中的文件扩展名,与app.engine
结合使用会使Express使用适当的模板引擎。
答案 1 :(得分:0)
谢谢@robertklep。
最后consolidate
(node.js模板引擎整合库)解决了我的问题。
这是一个有效的例子:
var http = require("http");
var express = require("express");
var app = express();
var express = require("express");
var app = express.createServer();
var dust = require('dustjs-linkedin'),
cons = require('consolidate');
app.engine('dust', cons.dust);
app.get("/dust", function(req, res) {
res.render('dust_template.dust', {header: 'DUST - TEST OK'});
});
app.get("/ejs", function(req, res) {
res.render('ejs_template.ejs', {header: 'EJS - TEST OK'});
});
app.listen(80);
ejs_template.ejs
和dust_template.dust
文件位于views
文件夹中。