2013-03-21 38 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文件夾中。