7

我想为 POST 数据生成解码结果。许多代码在转换“字符串”时被“浪费”了。这使代码难看。有更好的解决方案吗?

import           Codec.Binary.Url (decode')
import qualified Data.ByteString.Lazy.Char8 as L (unpack)
import qualified Data.ByteString.Char8 as S (unpack, pack)
import qualified Data.ByteString.Lazy as LBS (pack)

decodeUrlHandler :: Snap()
decodeUrlHandler = do
    body <- readRequestBody (maxBound :: Int64)
    writeLBS $ LBS.pack $ map (fromMaybe 0) $ decode' $ L.unpack body

您为此目的的代码是什么?

4

1 回答 1

9

Snap 会自动解码请求并通过Request数据类型将其提供给您。它提供了getRequestwithRequest函数来检索请求,并提供了许多其他访问器函数来获取各个部分。

还有一些常用操作的便利功能。要获取 POST 或 GET 参数,请参阅getParam

Snap 将其作为 ByteString 提供给您,因为该 API 处于相当低的抽象级别,由用户决定如何处理文本编码之类的事情。我建议您使用效率更高的文本类型而不是字符串。Readable类型类还提供了一种机制来消除这些转换的一些样板。数字和文本的默认实例采用 UTF8 编码。

于 2011-11-18T17:05:33.557 回答