2016-09-16 7 views
0

私のアプリケーションは次のように定義されます_apiは私が作成していsnapletあるどう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内query_機能を使用したい

data Api = Api 

:次のように定義されます。私がそうすることができる唯一の方法は、Apidata Api = Api { _db :: Snaplet Postgres }と定義することですが、これはpostgresのスナップショットを2回初期化すると思われますが、これは正しいとは思いません。私は_dbを '親' Appから取得する方法がわかりません。

私は正しい道にここにいるのですか? Apiスナップショットでデータベースにアクセスする正しい方法は何ですか?

答えて

0

なぜこのApiスナップレットを作成していますか? 2つ以上のWebアプリケーションでApiのものを再利用していますか?そうでない場合は、スナップショットを使用しないことをお勧めします。その後、すべてが完璧に動作します。 Handler App AppHasPostgresのインスタンスを持ち、あなたは気楽に行くことができます。

+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

関連する問題