我的申请被定义为:
data App = App { _api :: Snaplet Api, _db :: Snaplet Postgres }
makeLenses ''App
instance HasPostgres (Handler b App) where
getPostgresState = with db get
setLocalPostgresState s = local (set (db . snapletValue) s)
其中_api
是我创建的snaplet。它被定义为:
data Api = Api
我现在想在query_
snaplet中使用Api
函数。我可以这样做的唯一方法是将Api
定义为data Api = Api { _db :: Snaplet Postgres }
,但似乎这会将postgres snaplet初始化两次,我认为这是正确的。我不确定如何从父母那里得到_db
'} App
也是。
我在正确的道路上吗?在Api
snaplet中访问数据库的正确方法是什么?
答案 0 :(得分:0)
为什么要创建此for
snaplet?您是否在两个或更多网络应用中重用Api
中的内容?如果没有,我建议不要使用snaplet。然后一切都会完美。 Api
会有一个Handler App App
个实例,你可以按照自己的方式继续。