为什么Happstack(toResponse)默认使用text / plain?

时间:2013-01-09 14:57:44

标签: haskell happstack

我正在使用HStringTemplate使用数据结构渲染一个非常简单的模板来填充“漏洞”。模板渲染的结果只是String我用toResponse

即使此呈现模板有效,html happstack也会使用text/plain Content-Type

这是什么原因? text/html不应该是默认值,因为它是网络服务器吗? 我是否真的需要使用toResponseBS并自行设置text/html

以下是创建ServerPart Response

的代码
data Person = Person                                                                                                                                                                                                
    { name :: String                                                                                                                                                                                                
    , age ::Int                                                                                                                                                                                                     
    } deriving (Data, Typeable)                                                                                                                                                                                     

buildTemplate :: Person -> String -> FilePath -> ServerPart Response                                                                                                                                                
buildTemplate fields name template = do                                                                                                                                                                             
    unrendered <- liftIO $ readFile template                                                                                                                                                                        
    ok $ toResponse $ renderTemplate name fields unrendered                                                                                                                                                         

renderTemplate :: String -> Person -> String -> String                                                                                                                                                              
renderTemplate name fields unrendered = toString rendered                                                                                                                                                           
    where rendered = setAttribute name fields $ newSTMP unrendered

以下是网络服务器的输出:

Connection:Keep-Alive
Content-Type:text/plain; charset=UTF-8
Date:Wed, 09 Jan 2013 14:51:27 GMT
Server:Happstack/7.1.1
Transfer-Encoding:chunked

车身

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>Memlikweb</title>
    </head>
    <body>
        <h1>Hello, Richard!<h1>
        <p>Do you have 25 for me?</p>
    </body>
</html>

2 个答案:

答案 0 :(得分:3)

如果您将Text.Html传递给toResponse,则内容类型将为text / html。您正在传递一个字符串,toResponse表示内容类型是纯文本。

答案 1 :(得分:2)

happstack-hstringtemplate包为ToMessage StringTemplate提供了一个实例,这意味着如果您导入它然后在模板上使用toResponse而不渲染它,它将做正确的事情。