Как обслуживать статический контент с помощью Spock (Haskell)?

Я запускаю сервер Spock и хочу обслуживать некоторый статический контент. Я использую функцию respondMiddleware из пакета "Web.Spock.Action".

Подпись:

    respondMiddleware :: Monad m => Middleware -> ActionCtxT ctx m a

Я получаю это «промежуточное ПО», используя функцию staticPolicy из пакета «Network.Wai.Middleware.Static».

    staticPolicy :: Policy -> Middleware

И "Политика" с использованием addBase из пакета "Network.Wai.Middleware.Static"

    addBase :: String -> Policy

Вот мой кодовый блок:

    get ("/") $
      respondMiddleware $ staticPolicy $ addBase ("static")

static содержит index.html и связанные с ним файлы JS и CSS и размещается в корневом каталоге проекта стека. Я получаю ошибку Failed to load resource: the server responded with a status of 400 (Bad Request)


person Rishichandra Wawhal    schedule 06.12.2017    source источник
comment
Прошло некоторое время с тех пор, как я использовал Spock, поэтому это может быть неправильно: путь "/" в вашем RouteSpec не имеет подстановочного знака, поэтому я думаю, что он будет соответствовать только точно /. Я подозреваю, что вы хотите middleware $ staticPolicy $ addBase "static".   -  person Chris Martin    schedule 06.12.2017


Ответы (1)


Правильный способ сделать это — использовать функцию html из Web.Spock.Action.

Я использовал шаблон jinja с использованием имбиря для параметризации моего html-файла, а затем обслуживал его с помощью функции html.

import qualified Web.Spock.Action as SA

serveHtml :: JinjaTemplate -> SA.ActionT (LoggingT IO) ()
serveHtml tmplt = SA.html tmplt
person Rishichandra Wawhal    schedule 24.02.2018