提问者:小点点

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


使用UrlParser。parseHash函数我能够成功解析以下url:

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

当我在浏览器中复制粘贴并按enter键时,该行为与预期一样-应用程序将加载相应的视图。

但是现在我想删除#,为此我使用了UrlParser。解析路径函数。我保留了代码的其余部分,与以前完全一样——但由于某种原因,这不起作用。

复制粘贴此内容并按enter键时:

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

浏览器直接创建对elm反应器localhost服务器的请求。

没有路由发生。elm reactor服务器返回一个404-就好像没有名为/MyRepl的文件一样。elm/家/其他东西

但是没有#的路由应该是可能的,因为http://package.elm-lang.org/packages-Docs站点是用elm编写的,正如你所看到的,在url中没有#

问题:

有人经历过同样的问题吗?有没有办法解决这个问题?

或者你能给我指出一个回购协议,在那里不使用#的导航可以正常工作?


共1个答案

匿名用户

您需要一个后端服务器,为每个请求提供索引页。在提供索引页之后,路由将在Elm中照常进行。

例如,在express中,它看起来像:

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'));
});

榆树Reactor不支持这一点。

如果您正在使用webpack,您可以使用历史ApiFallback属性做同样的事情如何告诉webpack开发服务器为任何路由提供index.html