2012-02-06 92 views
3

我正在使用Express和Backbone.js構建站點。我想盡可能在​​前端處理。使用Express.js和Backbone.js設置默認路由

我很困惑的一件事是如何將路由請求推遲到Backbone而不是Express。我明白Backbone現在可以處理諸如'/ this/here'之類的路線,但當然Express會首先解釋這一點。

什麼是交給Backbone的最佳方式?我應該在Express中創建一個全局路線,處理我沒有特別定義的所有內容嗎?

回答

-1

我可能完全搞錯了,但express是一個服務器端框架,而backbone是一個客戶端框架。
只有服務器端框架負責分析傳入請求和傳遞資源的意義上的路由。

我想,你指的是資源路由(走出紅寶石on Rails的世界)裏明確支持什麼,那就是,在你的應用程序的每一個資源,請像/posts一個寧靜的URL。

你可以比GET,POST,PUT,DELETE這個資源和框架調度這些類型的權利正確的業務邏輯。在Backbone.js的

路線是(作爲我的理解)純客戶端的路線,從而使您有一個工作瀏覽器歷史記錄,同時建立一個全面的Ajax應用程序。

我希望能夠清楚的知道這兩件事雖然名字相同,但並不完全一樣。

+0

請參閱下面的答案。您可以使用app.get「*」或app.use傳遞請求,以便客戶端路由器可以完成其任務。 – WallMobile 2013-03-08 19:03:07

0

訣竅是,你的應用程序需要知道到在客戶端攔截哪些路由(例如,使用的node.js/Express.js)(例如,使用主鏈)和服務器側。這是通過在URL中使用散列('#')來完成的,該鏈接應該被Backbone捕獲。不包含散列的URL將被髮送到服務器。

以下是如何將路由添加到Backbone路由器對象的示例。我還添加了一個默認路由('* path'),它允許Backbone在客戶端捕獲任何其他路徑。請注意,此默認設置僅適用於包含雜湊的網址(「#」):

// Configure router. 
var AppRouter = Backbone.Router.extend({ 
    routes: { 
    'contact/add': 'addContact', 
    '*path': 'defaultPage' 
    }, 
    addContact: function() { 
    $content.html('Add'); 
    }, 
    defaultPage: function(path) { 
    $content.html('Default'); 
    }, 
}); 

// Initialize router. 
var appRouter = new AppRouter(); 
Backbone.history.start(); 

相應的HTML鏈接將被寫成:

<a href='/#contact/add'>Add</a> 
9

不知道爲什麼第一次的答案被接受,但這是不正確的。有兩種方法可以處理這個問題。

  1. 用戶捕捉一切都在你的節點獲得快遞航線

    app.get "*", (req, res) -> 
        res.render "index" 
    
  2. 使用包羅萬象的使用您的節點表達路線

    app.use (req, res) -> 
        res.render "index" 
    

無論這些應該是在所有路線的結束,使任何其他獲得任何頁面或API端點的仍將被調用。然後您的客戶端MVC路由器將轉到正確的頁面。