Как сделать маршрутизацию/навигацию в Elm без # (хэш) в URL?

Используя функцию UrlParser.parseHash, я смог успешно проанализировать следующий URL:

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

Поведение такое же, как ожидалось, когда я скопирую его в браузере и нажимаю enter - приложение загружается с соответствующим представлением.

Но теперь я хочу удалить #, и для этого я использовал функцию UrlParser.parsePath. Я сохранил остальную часть кода точно так же, как раньше, но по какой-то причине это не работает.

Когда я скопирую его и нажмите enter:

http://localhost:8000/MyRepl.elm/home/something-else - обратите внимание на #.

Браузер создает прямой запрос на локальный сервер elm-reactor.

Нет никакой маршрутизации. Сервер реактора elm возвращает 404 - как будто нет файла с именем /MyRepl.elm/home/something-else

Но маршрутизация без # должна быть возможной, потому что сайт http://package.elm-lang.org/packages - Docs написан в вязах и в URL-адресе нет #.

Вопросы:

У кого-то была такая же проблема? Любые идеи, как это исправить?

Или вы можете указать мне на репо, где навигация без # работает так, как ожидалось?

Ответ 1

Вам нужен бэкэнд, который обслуживает вашу индексную страницу для каждого запроса. После обслуживания индексной страницы маршрутизация будет происходить, как обычно, в 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'));
});

Реактор Elm не поддерживает это.

Если вы используете webpack, вы можете сделать то же самое с атрибутом historyApiFallback Как сообщить серверу webpack dev для обслуживания index.html для любого маршрута