如何在没有URL中的#(哈希)的情况下在Elm中进行路由/导航?

时间:2016-11-27 18:21:26

标签: elm

使用UrlParser.parseHash函数,我能够成功解析以下网址:

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

行为与预期一致,当我在浏览器中复制粘贴并点击回车时 - 应用程序会加载适当的视图。

但是现在我要删除#,为此我使用了UrlParser.parsePath函数。我完全像以前一样保留了其余的代码 - 但由于某种原因,这不起作用。

当我复制粘贴这个并点击回车:

http://localhost:8000/MyRepl.elm/home/something-else - 请注意没有#

浏览器向elm -reactor localhost服务器创建直接请求。

没有路由发生。 elm reactor服务器返回404 - 就好像没有名为/MyRepl.elm/home/something-else

的文件一样

但是,应该可以使用#进行路由,因为http://package.elm-lang.org/packages - 文档网站是用elm编写的,并且您可以看到网址中没有#

问题:

任何人都遇到过同样的问题?任何想法如何解决这个问题?

或者你能指点一个没有#的导航按预期工作的仓库吗?

1 个答案:

答案 0 :(得分:7)

您需要一个为每个请求提供索引页面服务的后端。在提供索引页面之后,路由将像往常一样在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

执行相同操作
相关问题