2017-12-06 17 views
8

Tôi đang chạy một máy chủ Spock và muốn phục vụ một số nội dung tĩnh. Tôi đang sử dụng chức năng respondMiddleware từ gói "Web.Spock.Action".Làm cách nào để phân phát nội dung tĩnh bằng Spock (Haskell)?

Chữ ký là:

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

Tôi nhận này "Middleware" bằng cách sử dụng chức năng staticPolicy từ "Network.Wai.Middleware.Static" gói

staticPolicy :: Policy -> Middleware 

Và "Chính sách" sử dụng addBase từ gói "Network.Wai.Middleware.Static"

addBase :: String -> Policy 

Dưới đây là codeblock tôi:

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

Các staticindex.html và các tập tin JS và CSS liên quan và nó được đặt trong thư mục gốc của ngăn xếp dự án. Lỗi tôi nhận được là Failed to load resource: the server responded with a status of 400 (Bad Request)

+2

Đã lâu rồi kể từ khi tôi sử dụng Spock, điều này có thể sai: Đường dẫn '"/"' trong RouteSpec của bạn không có ký tự đại diện, vì vậy tôi nghĩ rằng sẽ chỉ khớp * chính xác * '/'. Tôi nghi ngờ những gì bạn muốn là 'middleware $ staticPolicy $ addBase" static "'. –

Trả lời

2

Cách đúng để thực hiện việc này là sử dụng chức năng html từ gói Web.Spock.Action.

Tôi đã sử dụng jinja templating bằng gừng để tham số hóa tệp html của tôi và sau đó phân phối nó bằng chức năng html.

import qualified Web.Spock.Action as SA 

serveHtml :: JinjaTemplate -> SA.ActionT (LoggingT IO)() 
serveHtml tmplt = SA.html tmplt 
Các vấn đề liên quan