标签: haskell-spock

如何使用Spock(Haskell)提供静态内容?

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

签名是:

    respondMiddleware :: Monad m => Middleware -> ActionCtxT ctx m a
Run Code Online (Sandbox Code Playgroud)

我使用staticPolicy"Network.Wai.Middleware.Static"软件包中的函数获取此"中间件"

    staticPolicy :: Policy -> Middleware
Run Code Online (Sandbox Code Playgroud)

而"政策"则使用addBase来自"Network.Wai.Middleware.Static"的包

    addBase :: String -> Policy
Run Code Online (Sandbox Code Playgroud)

这是我的代码块:

    get ("/") $
      respondMiddleware $ staticPolicy $ addBase ("static")
Run Code Online (Sandbox Code Playgroud)

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

haskell static-content server haskell-stack haskell-spock

8
推荐指数
1
解决办法
358
查看次数

如何使用 Spock 和 Lucid 提供静态文件?

开始使用 Haskell、Spock 和 Lucid 进行 Web 开发时,我不知道如何提供静态文件。在Main.hsI have的目录中/static/css/main.css,它只包含一个背景颜色,以查看是否确实应用了 css。所以我的目录树看起来像

app
??? Main.hs
??? static
    ??? css
        ??? main.css
Run Code Online (Sandbox Code Playgroud)

但是,使用以下配置,main.css找不到该文件(使用 Firefox 检查它时包含 404)。除此之外,该网站显示正常。

在提供这些文件(使用 Wai)时,我试图模仿funblog示例,为 Lucid 而不是 Blaze 进行了更改。特别是middleware $ staticPolicy (addBase "static")fromWeb/Blog.hs和我们链接 css from 的行Web/Views/Site.hs

module Main where    

import           Network.Wai.Middleware.Static
import           Lucid
import           Web.Spock
import           Web.Spock.Config
import           Web.Spock.Lucid         (lucid)

type Server a = SpockM () () () a

main :: IO ()
main = do
  cfg …
Run Code Online (Sandbox Code Playgroud)

haskell haskell-spock haskell-lucid

5
推荐指数
0
解决办法
198
查看次数

如何在Spock请求处理程序中使用`IO String`?

我有以下函数生成1024的倍数的随机字符串:

import System.Random

rchars :: Int -> [IO Char]
rchars n = map (\_ -> randomRIO ('a', 'z')) [n | n <- [0..n]] -- a wasteful "iteration"-like func

rstr :: Int -> IO String
rstr n = sequence $ rchars (1024 * n)
Run Code Online (Sandbox Code Playgroud)

我想使用Spock将其暴露给Web,例如:

import Data.Monoid
import Data.Text
import Lib
import Web.Spock.Safe

main :: IO ()
main =
    runSpock 8080 $ spockT id $
    do get root $
           redirect "/data/1"
       get ("data" <//> var) $ \n ->
          do
           str <- …
Run Code Online (Sandbox Code Playgroud)

haskell io-monad haskell-spock

4
推荐指数
1
解决办法
265
查看次数

postgres-simple - 没有因使用“查询”而产生的 (ToRow Int) 实例

我是 Haskell 的新手,老实说,我遇到了困难。但它扩展了我的想法,所以我们走了。我正在尝试运行一个非常简单的 Web 服务器,它查询 Postgres 数据库并应将结果作为 JSON 返回。

查询非常简单:“Select id,data from MYTABLE where id = 1”

但是 haskell 的类型系统现在正在杀死我,我的行为的最终类型不匹配。我使用SpockPostgreSQL-Simple作为组合。

大多数教程对于我想要做的事情来说要么很简单,要么很困难。我介于两者之间,错过了很多对 Haskell 的理解,我之前的很多问题我已经通过简单的复制和粘贴解决了,并且得到了一个简单的版本。

但是一旦我尝试传递路由变量,我就会失败。这是我的工作版本。我的数据库表在这里称为“信封”,重要的调用是它说get "json"

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE FlexibleInstances #-}

module Main where

import Web.Spock
import Web.Spock.Config
import Database.PostgreSQL.Simple
import Data.Pool
import Data.Aeson (ToJSON(toJSON), object, (.=),Value)
import  Database.PostgreSQL.Simple.FromRow

type AppAction a = SpockActionCtx () Connection AppSession AppState a

data AppState = EmptyState
data AppSession = EmptySession

data Envelope = Envelope { …
Run Code Online (Sandbox Code Playgroud)

postgresql json haskell haskell-spock postgresql-simple

2
推荐指数
1
解决办法
1233
查看次数