Как сделать маршрутизацию/навигацию в 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 для любого маршрута