問題タブ [haskell-wai]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - Wai リクエストから Yesod ルートに移動するにはどうすればよいですか?
Wai HttpAuth ミドルウェアを使用して、いくつかのページを HTTP 基本認証の背後に隠したいと考えています。このために、HttpAuth ミドルウェアが提供しますauthIsProtected :: !(Request -> IO Bool)
。
実装するauthIsProtected
には、URL が管理者専用かどうかを確認する必要があります。これを行う最善の方法は、ファイルにルート属性を作成し、次の関数を使用してそれらにアクセスすることです。routes
routeAttrs :: RouteAttrs a => Route a -> Set Text
ただし、関数内の aRoute
にはアクセスできずauthIsProtected
、 Wai だけにアクセスできますRequest
。WaiRequest
から に移行する方法はありRoute
ますか? Yesod は内部でこれを行う必要があると思いますが、どこでどのように行うのかわかりませんでした。
isAuthorized
代わりに、にアクセスできる場所で認証を行う必要がある可能性がありますRoute
が、そこから HTTP 基本認証を実行できるかどうかはわかりません。
編集:これが私が思いついたものです:
haskell - Haskell WAI で、ヘッダーをミドルウェアとして追加するにはどうすればよいですか?
非常に単純なセッション マネージャーを作成して、ミドルウェアを理解しようとしています。
SetCookie
応答にヘッダーを追加する必要があります。wai-extra
パッケージを見て、見つけましwai-session
た。
私は wai-3.0.2 を使用していますが、Response の型コンストラクターに直接アクセスできないようです。パターン マッチを見つけたすべての例で、Response(..)
ヘッダーを追加しています。
正しい方向に私を向けることができますか?
haskell - 非アクティブ後にHaskell websocketが閉じますか?
接続を開いた後、次のようなスニペットがあります
イベントがクライアントから送信された場合、このコードは機能しますが、非アクティブな接続が閉じられた後、クライアント (web javascript) 接続が閉じられたときにエラーが発生します (websockets の onclose が呼び出されます)。一定の非アクティブ後に Websocket は閉じますか。また、これがメインスレッドにある場合、正常に動作しますか?
haskell - 「IO」が問題を引き起こさずに WAI でリクエスト パラメータを使用する
WAI を使用して API を起動および実行するための基本に苦労しています。IO
主な問題は、すべての感染に対処することです。モナドをよりよく理解すれば、私の問題は解決すると思いますが、この質問に対する答えが良い出発点になることを願っています。
/api/my-data
以下は、ルート URL で静的な html ページを提供し、対応するユーザーのデータを返すユーザー名を持つリクエストを受け入れる短い例です。マップ ルックアップを実行し、データを取得し、結果を json にエンコードして送り返すIO Bytestring
リクエストの使用方法がわかりません。body
を使用fmap
して抽出しBytestring
、それunpack
を検索用の文字列に変換しようとしましたが、何をしても、いまいましいIO
モナドに関連する型エラーを追跡することになります。
とにかく、ここに関連するコードがあります:
これにより、次のエラーが発生します。
andの型をgetUserInfo
andmyData
に簡単に変更できますが、型エラーが増えてしまいます。タイプは私の頭をぐるぐるさせています。IO Bytestring -> IO (Map.Map String String)
IO (Map.Map String String) -> Response
haskell - WAI ハンドラー内のデータベースと通信する際の IO によるエラーの回避
warp、wai、acid-state を使用して Haskell で Web サービスを作成しています。現在、データベースとの対話を必要とする 2 つのハンドラー関数があり、後者は私に問題を引き起こしています。
1 つ目は、登録です。
ご覧のとおりIO
、 で更新を実行することで、応答への感染を回避することができましたlet _ = ..
。
ログイン関数 (現在はユーザー マップのみを返す) では、IO
実際に応答で結果を返す必要があるため、 を避けることはできません。
これにより、次のエラーが発生します。
エラーは、値を返す db クエリが原因であると考えられIO
ます。私が最初に考えたのはResponse
、型シグネチャを に変更することでしたIO Response
が、最上位の関数は、Response
ではなく が必要であると不平を言いましたIO Response
。
同様に、次のように書きたいとregisterUser
思います。
しかし、これは非常によく似たエラーを引き起こします。
registerUser
完全を期すために、 andを呼び出す関数を次に示しますloginUser
。
これらの IO エラーを回避するにはどうすればよいですか?
haskell - Servant / Wai で静的ファイルを提供する
このチュートリアルhttp://www.parsonsmatt.org/programming/2015/06/07/servant-persistent.htmlに従って、サーバントを介して API を作成しています。サーバーをカスタマイズして静的ファイルも提供したいのですが、それを行う方法が見つかりませんでした。
stack
ビルドツールを使用しています。
Main.hs
ファイルの実行をstatic
( ) を含むように変更し、run port $ static $ logger $ app cfg
インポートしNetwork.Wai.Middleware.Static (static)
ました。wai-middleware-static >=0.7.0 && < 0.71
また、cabal ファイルに追加しました。
実行すると、次のよう (更新: この部分は完全に私のエラーです。パッケージを間違った cabal ファイルに追加しました..ラメ. Network.Wai.Middleware.Static のインポートは機能し、静的ファイルを提供します。場合に備えて、以下のエラーを残します誰もがそれを検索し、役に立つと思います。)stack build
になります:
次に、サーバントserveDirectory
を次のように使用してみました (簡略化):
次のエラーが表示されます。
私は Haskell の初心者で、Wai に慣れていないため、どこから始めればよいかわかりません。静的ファイルを提供するためにブログ投稿のサンプル コードを作成するには、どのような変更が必要ですか?
編集:コメントはデフォルトのビューから非表示になるため、最後のコメントをここに貼り付けます:
これは、Matt のブログのコードのトーンダウン バージョンです。彼のすべてのモジュールを単一のファイルに統合し、すべてのデータベースのものを削除しましたが、拡張機能/インポートをクリーンアップしませんでした. このコードを実行すると、上記のタイプの不一致エラーが発生します。このコードは Network.Wai.Middleware.Static を使用せず、Servant StaticFiles の限定インポートを使用していることに注意してください。