Snap Framework有一个关于如何使用snaplet编写Web应用程序的教程。存在一个用于连接到MySQL Snap.Snaplets.MysqlSimple的snaplet,它取决于库Database.MySQL.Simple,而且snaplet似乎是一个瘦包装器,用于隐藏连接句柄。
文档中唯一可用的示例不起作用。如a 2011 Haskell-cafe post(!)中所述,该示例在导出结果类型之前缺少某些类型注释。是否有一个功能齐全的Snap应用程序的简单示例,它连接到MySQL并获取一些结果?
其他问题:我想更改MySQL连接设置。运行应用程序会创建一个名为snaplets/mysql-simple/devel.cfg
的文件。即使重新编译,重新启动和/或重新加载,更改此文件中的设置似乎也不会影响应用程序。
答案 0 :(得分:2)
以下示例使用默认的MySQL连接设置:
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Snap
import Snap.Snaplet
import Snap.Snaplet.Heist
import Snap.Snaplet.MysqlSimple
import Control.Lens.TH
import Data.Int
import Data.Maybe
import qualified Data.Text as T
data App = App
{ _heist :: Snaplet (Heist App)
, _db :: Snaplet Mysql
}
makeLenses ''App
instance HasHeist App where
heistLens = subSnaplet heist
main :: IO ()
main = serveSnaplet defaultConfig appInit
appInit :: SnapletInit App App
appInit = makeSnaplet "myapp" "Some application" Nothing $ do
h <- nestSnaplet "heist" heist $ heistInit "templates"
d <- nestSnaplet "db" db mysqlInit
addRoutes [ ("/", defaultHandler), ("", heistServe) ]
return $ App h d
defaultHandler :: Handler App App ()
defaultHandler = do
ns <- q
forM_ ns $ \ (Only i) ->
writeText $ T.concat [ "id = ", T.pack (show i), "\n"]
q :: Handler App App [Only Int64]
q = with db $ query_ ("select id from sometable")