2016-09-16 19 views
0

我的應用程序被定義爲:如何從snaplet查詢數據庫

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 

我現在想用Api snaplet內query_功能。我可以這樣做的唯一方法是將Api定義爲data Api = Api { _db :: Snaplet Postgres },但似乎這會初始化兩次postgres snaplet,我認爲這不對。我不知道如何從'父'App獲得_db

我在正確的道路上嗎?訪問Api snaplet數據庫的正確方法是什麼?

回答

0

你爲什麼要創建這個Api snaplet?您是否在兩個或更多網絡應用中重複使用Api中的內容?如果沒有,我會建議不要使用snaplet。那麼一切都將完美運作。 Handler App App將有一個HasPostgres實例,你可以繼續你的快樂方式。

+0

主要原因是從'/ api/...'URL提供API。有沒有更好的方法來做到這一點? – zoran119

+1

'dir「api」apiHandler'(http://hackage.haskell.org/package/snap-core-1.0.0.0/docs/Snap-Core.html#v:dir​​) – mightybyte

+1

或者,[路由功能] (http://hackage.haskell.org/package/snap-core-1.0.0.0/docs/Snap-Core.html#v:route)...'route [(「api」,apiHandler),...其他路線......]' – mightybyte