私のアプリケーションはブックマークレットを使用しており、CORS を許可しMyRouteR
て、ブックマークレット コードが AJAX リクエストにこのルートを使用できるようにする必要があります。
config/routes の最初のドラフトではMyRouteR
、PUT という 1 つのリクエスト メソッドのみをサポートしました。しかし、ブラウザーが CORS プリフライト リクエストに使用する OPTIONS メソッドもサポートする必要があることが判明しました。
config/routes で次のようになりました。
/myroute MyRouteR PUT OPTIONS
このルートのメソッド リストに OPTIONS を追加すると自動的に CORS がサポートされるように、config/routes を処理する Template Haskell に関連する機械がいくつかあることを期待していましたが、さいころはありません。世界の終わりではありませんが、それは理にかなっていて、そのようにエレガントに感じたでしょう.
CORS を機能させるために、ルートに OPTIONS ハンドラーを指定しました。
optionsMyRouteR :: Handler RepPlain
optionsMyRouteR = do
addHeader "Access-Control-Allow-Origin" "*"
addHeader "Access-Control-Allow-Methods" "PUT, OPTIONS"
return $ RepPlain $ toContent ("" :: Text)
putMyRouteR :: Handler RepJson
putMyRouteR = do
addHeader "Access-Control-Allow-Origin" "*"
-- more stuff ...
これは機能しますが、ボイラープレートであるため、少しYesodicではないように感じます. だから、2つの質問:
- Yesodicよりも優れた形容詞はありますか?
- ルートがクロスオリジンリクエストをサポートできるようにする別のより良い方法はありますか?