8

Ich verwende einen Spock-Server und möchte einige statische Inhalte bereitstellen. Ich verwende respondMiddleware Funktion aus dem "Web.Spock.Action" -Paket.Wie statische Inhalte mit Spock (Haskell) zu bedienen?

Die Signatur ist:

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

Ich erhalte diese "Middleware" mit der staticPolicy Funktion von "Network.Wai.Middleware.Static" -Paket

staticPolicy :: Policy -> Middleware 

und der "Policy" mit addBase von "Network.Wai.Middleware.Static" -Paket

addBase :: String -> Policy 

Hier ist mein Codeblock:

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

Die static hat eine index.html und die damit verbundenen JS und CSS-Dateien und wird im Stammverzeichnis des Stapels Projekt gelegt. Der Fehler, den ich bekomme, ist

+2

Es ist schon eine Weile her, seit ich Spock verwendet habe, so kann dies falsch sein: Der Pfad '„/“' in Ihrem RouteSpec kein Wildcard hat, so denke ich, dass nur passen * genau * '/'. Ich vermute, was Sie wollen, ist 'Middleware $ staticPolicy $ addBase" static "'. –

Antwort

2

Der richtige Weg, dies zu tun ist mit der html Funktion aus dem Web.Spock.Action Paket.

Ich benutzte ein Jinja Templating mit Ingwer, um meine HTML-Datei zu parametrieren und dann diente es mit der html-Funktion.

import qualified Web.Spock.Action as SA 

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