2012-11-17 77 views
1

在我看來,這似乎是一個非常基本的問題,但我一直無法找到答案。Node.js和Express靜態中間件路由視圖

我用快遞與ejs作爲模板引擎和下面的目錄結構:

|-static 
|---css 
|---img 
|---js 
|-views 

我已經靜態路由爲static文件夾定義:

app.configure(function(){ 
     app.set('views', __dirname + '/views'); 
     app.set('view engine', 'ejs'); 
     app.use(express.bodyParser()); 
     app.use(partials()); 
     app.use(express.methodOverride()); 
     app.use(express.static(__dirname + '/static')); 
     app.use(app.router); 
     app.enable("jsonp callback"); 
    }); 

Views文件夾我把所有的我的ejs文件 - 一個layout.ejs和其餘文件與具體頁面的實際內容。

我已經定義了以下路線:

這需要layout.ejs和與頁面呈現它在一起。

很顯然,我不想每次添加新頁面時都添加一條新路線,我希望它自動完成。

所以我猜它應該與定義另一個app.use(express.static(__dirname + '/views'));?我也不想讓網址顯示/about.ejs,但顯示​​

有人請指點我在正確的方向嗎?

謝謝!

回答

3

您可以編寫自己的路由邏輯,例如

function customRouter (req, res, next) 
{ 
    var locals = {}; 
    var controllerName = req.params.controllerName; 
    res.render(controllerName + '.ejs', locals); 
} 

app.get('/:controllerName', customRouter); 

但是,這是一個簡單的例子,它應該給你的伎倆。您可以根據自己的需要進行修改。

+0

正是我需要的,謝謝! – Michael

+0

我有關於你sugegsted的方法的後續問題。嘗試訪問位於'sample/file'中的文件不起作用,但是訪問'file.ejs'工作(兩個文件分別位於'/ views/sample'和'/ views'中)。你知道爲什麼嗎 ? – Michael

+0

我想不出你的問題在這裏,你能給更多的細節... –