2017-01-19 11 views
0

アプリケーションの再配置を容易にするため、私はScottyアプリケーションのディスクではなくメモリから静的ファイルを提供したいと考えています。私は現在wai-middleware-staticを使ってディスクからファイルを提供していますが、があることがわかりますが、それはMiddlewareの形式ではありません。Scotty webappのメモリから静的ファイルを配信する

wai-app-staticApplicationMiddlewareにすることはできますか?紛失している別のパッケージがありますか?

答えて

0

私は自分自身を作りましたので、https://github.com/adamse/wai-middleware-static-embeddedに基づいてwai-middleware-staticを探していました。

は、それが供給され、リストにある場合、ファイルを提供しています機能

static :: [(FilePath, ByteString)] -> Middleware 

を提供します。

1

は、タイプApplication -> Applicationです。あなたはMiddlewaresomeApplicationを有効にする のであれば、あなたが を行うことができます方法は、それは次のようになります。

staticMiddleware :: Middleware 
staticMiddleware = \app -> someApplication 

あなたはApplicationある引数を捨てて、あなたが望む アプリケーションを返し、そして今、あなたはMiddlewareを持っています!

おそらくあまり役​​に立たないでしょうMiddleware。あなたはそれを処理する方法を理解するために、 リクエストを見たいでしょうか?同様に、この静的サーバーミドルウェアは を処理する要求がありますが、その他のものは通常のサーバーで処理するために になりますか?

はたぶん、あなたはこのような何かを行うことができます:

someMiddleware :: Middleware 
someMiddleware = \app -> branchingApp 

branchingApp :: Application 
branchingApp req functionReqToRecieved = 
    if iWantToStaticServeThis req 
    then staticApp req functionReqToRecieved 
    else dynamicApp req functionReqToRecieved 

これはひどいコードはそれほどコピーしないでくださいですが、私はそれは全体のアイデアを取得します願っていますか?

Applicationは、関数:Request -> (Response -> IO ResponseReceived) -> IO ResponseReceivedです。私は最初の引数(要求)を のように使う方法を述べたいと思います。したがって、この Middlewareの代わりに 自身のApplicationを作成しています。これはちょうどRequestを見て、が処理する を決定します。その後、引数 をApplicationに返します。

でもこれを行うどこかのヘルパー機能があるかもしれませんが、わかりません。

+0

(私はあなたがすでに答えを見つけたのを見ましたが、私はこれを草稿に入れましたので、将来誰かに役立つ場合に備えて投稿しました) – Libby

+1

ありがとう、 :) – adamse

関連する問題