EJS和DUST - 并排

时间:2013-03-21 11:50:18

标签: node.js ejs dust.js

我正在使用带有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

让他们并肩生活的正确方法是什么?

2 个答案:

答案 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.ejsdust_template.dust文件位于views文件夹中。