我正在使用Express和Backbone.js構建站點。我想盡可能在前端處理。使用Express.js和Backbone.js設置默認路由
我很困惑的一件事是如何將路由請求推遲到Backbone而不是Express。我明白Backbone現在可以處理諸如'/ this/here'之類的路線,但當然Express會首先解釋這一點。
什麼是交給Backbone的最佳方式?我應該在Express中創建一個全局路線,處理我沒有特別定義的所有內容嗎?
我正在使用Express和Backbone.js構建站點。我想盡可能在前端處理。使用Express.js和Backbone.js設置默認路由
我很困惑的一件事是如何將路由請求推遲到Backbone而不是Express。我明白Backbone現在可以處理諸如'/ this/here'之類的路線,但當然Express會首先解釋這一點。
什麼是交給Backbone的最佳方式?我應該在Express中創建一個全局路線,處理我沒有特別定義的所有內容嗎?
我可能完全搞錯了,但express是一個服務器端框架,而backbone是一個客戶端框架。
只有服務器端框架負責分析傳入請求和傳遞資源的意義上的路由。
我想,你指的是資源路由(走出紅寶石on Rails的世界)裏明確支持什麼,那就是,在你的應用程序的每一個資源,請像/posts
一個寧靜的URL。
你可以比GET,POST,PUT,DELETE這個資源和框架調度這些類型的權利正確的業務邏輯。在Backbone.js的
路線是(作爲我的理解)純客戶端的路線,從而使您有一個工作瀏覽器歷史記錄,同時建立一個全面的Ajax應用程序。
我希望能夠清楚的知道這兩件事雖然名字相同,但並不完全一樣。
訣竅是,你的應用程序需要知道到在客戶端攔截哪些路由(例如,使用的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>
不知道爲什麼第一次的答案被接受,但這是不正確的。有兩種方法可以處理這個問題。
用戶捕捉一切都在你的節點獲得快遞航線
app.get "*", (req, res) ->
res.render "index"
使用包羅萬象的使用您的節點表達路線
app.use (req, res) ->
res.render "index"
無論這些應該是在所有路線的結束,使任何其他獲得任何頁面或API端點的仍將被調用。然後您的客戶端MVC路由器將轉到正確的頁面。
請參閱下面的答案。您可以使用app.get「*」或app.use傳遞請求,以便客戶端路由器可以完成其任務。 – WallMobile 2013-03-08 19:03:07