2016-11-27 55 views
10

使用UrlParser.parseHash功能我是能夠成功地解析以下網址:如何在Elm中沒有#(散列)的URL中進行路由/導航?

http://localhost:8000/MyRepl.elm/#home/something-else

如所期望的行爲,當我複製在瀏覽器中粘貼並回車 - 應用程序加載與相應的視圖。

但是現在我想刪除#併爲此使用UrlParser.parsePath函數。我完全像以前一樣保留了其他代碼 - 但由於某種原因,這不起作用。

當我複製粘貼,然後回車:

http://localhost:8000/MyRepl.elm/home/something-else - 注意無#

瀏覽器向elm -reactor localhost服務器創建直接請求。

沒有路由發生。榆樹反應器服務器返回404 - 因爲如果沒有命名/MyRepl.elm/home/something-else

但是路由不#因爲http://package.elm-lang.org/packages應該是可能的文件 - 文件的網站是用榆木並且在你可以看到URL中有#

問題:

任何人都經歷了同樣的問題?任何想法如何解決這一問題?

或者你能否指點我回購沒有#的導航按預期工作?

+0

我建議你檢查榆樹反應器是否支持深層鏈接是相同的。如果http服務器不支持它,那麼SPA就無法完成它的工作。 – Tosh

+0

查看我的示例https://github.com/rofrol/elm-navigation-example – rofrol

回答

6

您需要一個後端爲您的索引頁面處理每個請求。在服務索引頁之後,路由將像往常一樣在Elm中發生。

例如在表達它會看起來像:

router.get('/', function(req, res) { 
    res.sendFile(path.join(__dirname, 'public/index.html')); 
}); 

router.get('/*', function(req, res) { 
    res.sendFile(path.join(__dirname, 'public/index.html')); 
}); 

榆樹反應器不支持此功能。

如果您正在使用的WebPack你可以做的historyApiFallback屬性How to tell webpack dev server to serve index.html for any route

相關問題