2017-12-06 153 views
8

Używam serwera Spock i chcę obsłużyć trochę statycznej zawartości. Używam funkcji respondMiddleware z pakietu "Web.Spock.Action".Jak wyświetlać treści statyczne za pomocą Spocka (Haskell)?

Podpis brzmi:

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

jestem coraz to "Middleware" za pomocą funkcji staticPolicy z "pakietu" Network.Wai.Middleware.Static

staticPolicy :: Policy -> Middleware 

i "Polityki" za pomocą addBase z pakietu "Network.Wai.Middleware.Static"

addBase :: String -> Policy 

Oto mój blok kodu:

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

static ma index.html i związane z nim pliki JS i CSS i jest on umieszczony w katalogu głównym projektu stosu. Otrzymuję błąd: Failed to load resource: the server responded with a status of 400 (Bad Request)

+2

Minęło trochę czasu odkąd Użyłem Spock, więc może to być źle: Droga '„/”' w swoim RouteSpec nie posiada wieloznaczny, więc myślę, że będzie tylko dopasować * dokładnie * '/'. Podejrzewam, że chcesz "middleware $ staticPolicy $ addBase" static ". –

Odpowiedz

2

Właściwym sposobem jest użycie funkcji html z pakietu Web.Spock.Action.

Użyłem szablonowania jinja używając imbiru do sparametryzowania mojego pliku html, a następnie podałem go za pomocą funkcji html.

import qualified Web.Spock.Action as SA 

serveHtml :: JinjaTemplate -> SA.ActionT (LoggingT IO)() 
serveHtml tmplt = SA.html tmplt