【问题标题】:How to serve static content using Spock (Haskell)?如何使用 Spock (Haskell) 提供静态内容?
【发布时间】:2018-05-20 01:17:52
【问题描述】:

我正在运行 Spock 服务器并希望提供一些静态内容。 我正在使用“Web.Spock.Action”包中的respondMiddleware 函数。

签名是:

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

我正在使用“Network.Wai.Middleware.Static”包中的staticPolicy 函数获取这个“中间件”

    staticPolicy :: Policy -> Middleware

以及使用“Network.Wai.Middleware.Static”包中的addBase 的“策略”

    addBase :: String -> Policy

这是我的代码块:

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

static 有一个index.html 和相关的 JS 和 CSS 文件,它放在 stack 项目的根目录下。我得到的错误是Failed to load resource: the server responded with a status of 400 (Bad Request)

【问题讨论】:

  • 自从我使用 Spock 已经有一段时间了,所以这可能是错误的:RouteSpec 中的路径 "/" 没有通配符,所以我认为它只会匹配 正是 /。我怀疑你想要的是middleware $ staticPolicy $ addBase "static"。

标签: haskell server haskell-stack static-content haskell-spock


【解决方案1】:

正确的方法是使用 Web.Spock.Action 包中的 html 函数。

我使用了一个 jinja 模板,使用了 ginger 来参数化我的 html 文件,然后使用 html 函数提供它。

import qualified Web.Spock.Action as SA

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

【讨论】:

    猜你喜欢
    • 2017-09-23
    • 2018-12-25
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2011-10-14
    相关资源
    最近更新 更多