2013-03-21 50 views
0

我用express和ejs使用node.js。EJS和尘埃 - 并排

我应该把我的站点从ejs移动到另一个模板引擎--disperset.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

下面是关于如何使用两个引擎一个简单的例子,并排侧(我用玉,因为灰尘给我讲起了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将使用适当的模板引擎。

+0

要解决express 3+和dust的require.paths问题,您需要将灰尘移至dustjs-linkedn。 – jarmod 2013-12-14 19:58:46

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文件夹中。