2016-11-27 2 views
10

Использование функции UrlParser.parseHash я был в состоянии успешно разобрать следующий URL:Как сделать маршрутизацию/навигацию в Elm без # (хеш) в URL?

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

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

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

Когда я копировать вставить это и нажмите клавишу ВВОД:

http://localhost:8000/MyRepl.elm/home/something-else - не заметили, не #.

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

Прогулка по маршруту отсутствует. Сервер реактора вяза возвращает 404 - как если нет файла с именем /MyRepl.elm/home/something-else

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

Вопросы:

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

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

+0

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

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

Если вы используете WebPack вы можете сделать то же самое с historyApiFallback атрибутом How to tell webpack dev server to serve index.html for any route

Смежные вопросы