Хаскелл Спок: Как получить необработанное тело запроса
Функция body в Web.Spock.Action должна возвращать необработанное тело запроса. Тем не менее, похоже, что это не так:
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Data.Text.Encoding (decodeUtf8)
import Debug.Trace (trace)
import Web.Spock
import Web.Spock.Config
app :: SpockM () () () ()
app = do
get root $ text "Hello!"
post "test" $ do
b <- body -- b is always ""!
text $ trace ("b="++show b) decodeUtf8 b
main :: IO ()
main = do
spockCfg <- defaultSpockCfg () PCNoDatabase ()
runSpock 3000 (spock spockCfg app)
curl --data 123123 localhost:3000/test
ничего не возвращает, а trace
вывод подтверждает, что b
пустая строка
Spock is running on port 3000
b=""
Эквивалентное приложение Scotty работает просто отлично:
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Data.Text.Lazy.Encoding (decodeUtf8)
import Web.Scotty
main = scotty 3000 $ do
get "/" $ text "Hello!"
post "/test" $ do
b <- body -- works fine
text $ decodeUtf8 b
Я абсолютно не вижу, что я делаю неправильно. Любой вклад будет высоко оценен!
Обновление: приведенный выше пример будет работать с Spock >= 0.12.0.0
!