Пользовательский 404 в Snap Web Framework

Я создаю веб-сайт с помощью Snap. Как указать собственный обработчик 404 для захвата всех несуществующих маршрутов?

Я хотел бы переопределить значение по умолчанию:

No handler accepted "/asdfasdf"

Спасибо


person The Internet    schedule 11.10.2013    source источник


Ответы (1)


Правильный способ изменить поведение маршрутизации — использовать wrapSite :

wrapSite (\site -> site <|> writeBS "Use your custom 404 handler" )

В примере кода вы можете добавить эту строку в свой базовый Initializer. В коде Snap Init это будет функция do from app.


Также "" будет соответствовать любому указанному маршруту. Пример:

routes = [ ("/login",    with auth handleLoginSubmit)
         , ("/logout",   with auth handleLogout)
         , ("/new_user", with auth handleNewUser)
         , ("/static", serveDirectory "static")
         , ("",        writeBS "This if none of the others" )
         ]

Вы можете изменить обработчик для "" на свой собственный 404.

person MdxBhmt    schedule 11.10.2013
comment
Спасибо за это. Это трудно увидеть, так как приложение по умолчанию дает вам [(, serveDirectory /static)] по умолчанию - person The Internet; 11.10.2013
comment
Это работает в некоторых случаях, но надежнее использовать ссылку wrapSite для переноса всех возможных маршрутов, включая те, которые могут быть определены другими снимками. Это будет выглядеть примерно так wrapSite (\site -> site <|> handle404). - person mightybyte; 11.10.2013