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



我使用HStringTemplate渲染一个非常简单的模板,使用数据结构来填充"洞"。模板渲染的结果只是一个String我喂toResponse

即使这个渲染模板是有效的html happstack使用text/plain Content-Type

这是什么原因?不应该text/html是默认的,因为它是一个web服务器?我真的需要自己使用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

下面是web服务器的输出:

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>

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

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

相关内容

  • 没有找到相关文章

最新更新