2011-11-29 65 views
3

我有很多途徑,如:如何處理Express.JS中同一控制器的不同動作?

//routes 
app.get("page1/:action", function(req, res) { 
    ... 
} 

app.get("page2/:action", function(req, res) { 
    ... 
} 

其中page1page2兩個控制器和:action是「方法」我需要調用。該頁面應該是:

  1. /第1頁/刪除
  2. /第1頁/修改
  3. /第1頁/加

我嘗試整理我的代碼,以簡化在一個MVC系統中的作業。 有人可以給我一個建議,我怎樣才能通過讀取我使用的參數來調用控制器的方法:action我需要檢查方法是否存在如果不是(如果有人寫/page1/blablabla)我返回一個404 http錯誤。

謝謝!

+1

我會看看到[功能](http://expressjs.com/api.html#app.VERB)''app.get'應用.post''app.put'' app.delete'這將使你的界面更加[RESTful](http://en.wikipedia.org/wiki/Representational_state_transfer#Concept) – EhevuTov

回答

5

下面是一個關於如何實現這個的例子。你可以閱讀更多關於這對Expressjs指南:http://expressjs.com/guide/error-handling.html

function NotFound(msg){ 
    this.name = 'NotFound'; 
    Error.call(this, msg); 
    Error.captureStackTrace(this, arguments.callee); 
} 
NotFound.prototype.__proto__ = Error.prototype; 

//routes 
app.get("page1/:action", function(req, res) { 
    switch(req.params.action) { 
    case 'delete': 
     // delete 'action' here.. 
     break; 
    case 'modify': 
     // delete 'modify' here.. 
     break; 
    case 'add': 
     // delete 'add' here.. 
     break; 
    default: 
     throw new NotFound(); // 404 since action wasn't found 
     // or you can redirect 
     // res.redirect('/404'); 
    } 
} 

app.get('/404', function(req, res){ 
    throw new NotFound; 
}); 
+0

完美!但我能不能優化它?我的意思是:if(myController。{req.params.action}){req.params.action()} else {throw new NotFound()}你怎麼看? – Dail

+0

你可以這樣做:myController = ['delete','modify','add']; if(myController [req.params.action]){...} else {throw new NotFound()} – alessioalex

+0

非常好的解決方案!謝謝 – Dail

相關問題