좋아, 내가 알아 낸 것이있다.
{-# LANGUAGE OverloadedStrings, DeriveDataTypeable #-}
import qualified Data.ByteString.Lazy.Char8 as L
import Happstack.Server
import Happstack.Server.Types
import Control.Monad.IO.Class (liftIO)
import Data.Data (Data, Typeable)
-- easiest to serialize/deserialize objects
data Unit = Unit { x :: Int, y :: Int } deriving (Show, Eq, Data, Typeable)
-- put this function in a library somewhere
getBody :: ServerPart L.ByteString
getBody = do
req <- askRq
body <- liftIO $ takeRequestBody req
case body of
Just rqbody -> return . unBody $ rqbody
Nothing -> return ""
myRoute :: ServerPart Response
myRoute = do
body <- getBody -- it's a ByteString
let unit = fromJust $ A.decode body :: Unit -- how to parse json
ok $ toResponse $ A.encode unit -- how to send json back.
이것이 올바른 해결책입니다. Happstack.Server.RqData의 코드는 url-encoded 및 multiple/form-data 제출을 처리합니다. 원시 요청 본문 만 필요하면 takeRequestBody로 가져옵니다. 언젠가는 충돌 과정에 AJAX/JSON 섹션이있을 것입니다. – stepcut
@Sean Clark,이 코드에서 <- 광범위하게 사용됩니다. 그것은 할당 문 (또는)보다 더 그것 ?? 'body <- getBody'와 같이. getBody의 반환 값은 본체 변수 –
에 주어집니다. @MadhavanKumar 그 이상입니다. haskell 모나드 및 do-notation 참조 – Bladt