我想要在前端和node.js/express作爲服務器上使用backbone.js構建一個單獨的頁面應用程序,我想要有一個基礎HTML文件的根目錄,然後當用戶瀏覽到諸如使用pushstate和node.js/express作爲服務器來獲得骨幹路由
mydomain.com/foo/bar
我希望能夠通過JavaScript來處理,而不是使往返於服務器的客戶端上的這條道路的任何路徑。我正在閱讀關於骨幹路由和HTML5推送狀態。在this article他介紹了推動國家尚且如此,
事實上,pushState的實在沒有什麼比JavaScript的標準API,它允許我們通過「推」荷蘭國際集團全網址到瀏覽器的URL未做操縱瀏覽器歷史記錄更多到服務器的往返旅程,並使用Javascript響應URL中的更改 - 所有這些都不使用URL散列碎片。
但是當我使用push狀態時,它確實會發出服務器請求,並期望服務器在/ foo/bar下提供內容。我不明白我能如何避免這種情況。
現在讓我們假設,即使在推送狀態下,當您直接訪問此URL時,您的客戶端將在mydomain.com/foo/bar下發出服務器請求。在這種情況下,因爲我服務的默認HTML文件,這個默認的HTML文件中有鏈接腳本:
<script type="text/javascript" src="/scripts/myscript.js" ></script>
當這個HTML的負載,它開始尋找/ foo的目錄,而不是根目錄下的腳本因爲服務器在/ foo下被請求,這顯然不存在。我該如何解決?
我真的很困惑在這一點上。我想知道URL路由通常如何在單個頁面應用程序中完成。任何幫助將不勝感激。您也可以參考我發佈的關於同一問題的其他問題:Backbone Router : Get rid of # in the URL
我剛剛在前些日子有同樣的問題。除了我使用node.js並在後端表示服務路由。我認爲按照我的經驗,推送狀態可能需要一些服務器端的響應,用一點鹽就可以實現。在服務器上,我允許express在此路由上呈現一個文件'localhost:3300/chat',在客戶端我允許push狀態,並在此路由命中'localhost:3300/chat'時呈現視圖。 –
另一個有助於寫作backbone.history這樣的''Backbone.history.start({pushState:true,root:'/'});'嘗試添加一個根'/'您的應用程序/網站是否在主路線上啓動'/' –
然後確保你的路由器設置正確'appRoutes:{ '':'profile', 'chat':'chat' }' –