2013-02-17 66 views
2

我試圖爲Express設置一個MVC體系結構。我試圖完成的是一個接近ASP.NET的路由機制。例如,對於以下路由:Express.js - 類似ASP.NET的MVC路由

/users/detail/1 

express應調用名爲users.js的控制器目錄下的模塊。 users.js模塊內部是一個名爲detail的函數。在函數中,我可以簡單地獲取請求參數以獲取用戶的ID。

我的想法是提取用戶並使用簡單的require語句將其映射到users.js文件。但是,如何通過簡單地提取上例中'detail'的路由的action部分來告訴express來調用details()函數。我可以使用eval(),但我聽說這不是一件安全的事情嗎?提前致謝。

+0

有[已有庫(HTTP:// vschart.com/compare/compoundjs/vs/tower-js/vs/flatiron/vs/asp-net-mvc-framework)。 [CompoundJS](http://compoundjs.com/)和[TowerJS](http://towerjs.org/)都相當成熟,但[肯定其他](http://stackoverflow.com/q/ 9744798)。如果沒有別的,你可以用它們來激發你自己的實現。 – 2013-02-17 06:23:09

回答

2

在瀏覽器端的JavaScript,通常可以做以下

function a() { console.log('called a'); 
window['a'](); // called a 

您可以通過替換window與做類似的節點global

function a() { console.log('called a'); 
global['a'](); // called a 

不過,如果你是拉這個從另一個文件中運行,它將會有所不同。讓我們假設你有以下文件a_module.js

exports.a = function() { console.log('a called'); } 

然後在你的主文件,你可以做到以下幾點:

var a_mod = require('./a_module.js'); 
a_mod['a']();  // a called 
+0

謝謝,先試試這個。 – 2013-02-17 06:41:55