Как я могу разделить провал маршрута и посещение страницы индекса в Happstack?

Я хочу, чтобы пользователь мог посетить myserver.com и прийти к указателю маршрута.

И я хочу показать страницу списка, когда они посещают myserver.com/pages,

Однако, если пользователь посещает недействительный URL, такой как myserver.com/invalidpath/blabla это проваливается indexPage маршрут.

Я хочу ответить с 404 page когда неверный URL посещается.

Вот пример моих маршрутов:

  1 routes :: ServerPart Response                                                                                                                                                                                   
  2 routes = msum                                                                                                                                                                                                   
  3     [ dirs "pages/delete" $ delete                                                                                                                                                                              
  4     , dirs "pages/edit"   $ edit                                                                                                                                                                                
  5     , dirs "pages/save"   $ save                                                                                                                                                                                
  6     , dirs "pages"        $ listPages                                                                                                                                                                           
  7     , indexPage]  

То, о чем я думал сейчас, это то, что в моем indexPage Функция Я могу проверить путь, если он содержит что-либо или если он пуст. Таким образом, я могу определить, произошел ли сбой из-за неверного URL-адреса или посещения страницы индекса.

Есть ли хороший способ сделать это?

1 ответ

Решение

При написании этого ответа я нашел решение в документах по взлому.

Есть функция под названием nullDir который вы используете, когда путь пуст.

Используя эту функцию, мой пример маршрута будет выглядеть так:

  1 routes :: ServerPart Response                                                                                                                                                                                   
  2 routes = msum                                                                                                                                                                                                   
  3     [ dirs "pages/delete" $ delete                                                                                                                                                                              
  4     , dirs "pages/edit"   $ edit                                                                                                                                                                                
  5     , dirs "pages/save"   $ save                                                                                                                                                                                
  6     , dirs "pages"        $ listPages                                                                                                                                                                           
  7     , nullDir >> indexPage
  8     , 404Page]  

Теперь index page отображается только если путь пуст, а 404 page показывается для всех других провалов.

Другие вопросы по тегам