我使用Yesod编写个人备份系统,并遇到了一个有趣的问题。在谈到Haskell时,我相对缺乏经验,所以我确信这些都不是最佳的。
这是我的处理程序之一:
postHostR :: Text -> RcPath -> Handler Text
postHostR hostName f = do
hostId <- insertIfDontExist hostName
tBody <- (T.pack . show) <$> getRawRequest
time <- lift getCurrentTime
newId <- runDB $ insert $ RcFile hostId tBody (makePath f) time
return $ T.pack $ show newId
我从数据库中检索的任何文本都会自动添加双引号。我假设这是某种XSS安全性,但我并不担心,因为我不打算渲染页面。引号似乎实际上并不是文本的一部分(我试图剥离第一个和最后一个字符,但这似乎并没有实际删除引号)。
谢谢!
答案 0 :(得分:4)
此问题的常见原因是您有一个字符串,并且当您不需要时,您已在其上调用show
。 (最常见的是有人在他们真正想要print x
时putStrLn x
。{/ p>
在您的情况下,我不确定类型签名,但我怀疑您的最后一行可以更改
return $ T.pack $ show newId
到
return newId
我怀疑newId
已经 Text
,因此在其上调用show
只会在其周围添加不需要的引号(并将其转换为String
然后,您使用T.pack
转回Text
)。如果你只是归还它,它可能会起作用。
(然后,我可能完全弄错了类型签名;从这里很难说出来。)