Ursprungsübergreifende Anfragen in Yesod zulassen

Meine Anwendung verwendet ein Lesezeichen, und ich muss CORS für zulassenMyRouteR Mein Bookmarklet-Code kann diese Route also für AJAX-Anfragen verwenden.

In meinem ersten Entwurf von config / routes habe ich angegebenMyRouteR Unterstützung für nur eine Anforderungsmethode, PUT. Es stellte sich jedoch heraus, dass ich auch die OPTIONS-Methode unterstützen musste, die von Browsern für CORS-Preflight-Anforderungen verwendet wird.

Ich habe folgendes in config / routes gefunden:

/myroute MyRouteR PUT OPTIONS

Ich hatte gehofft, dass es in Template Haskell einige relevante Maschinen geben würde, die config / routes verarbeiten, sodass das Hinzufügen von OPTIONS zu der Methodenliste dieser Route automatisch zu CORS-Unterstützung führen würde, aber keine Würfel. Nicht das Ende der Welt, aber es hätte Sinn ergeben und sich auf diese Weise elegant angefühlt.

Damit CORS funktioniert, habe ich der Route einen OPTIONS-Handler gegeben:

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 ...

Das funktioniert, aber es fühlt sich etwas un-jesodisch an, weil es so heiß ist. Also zwei Fragen:

Haben wir ein besseres Adjektiv als Jessodic?Gibt es eine andere, bessere Möglichkeit, eine Route ursprungsübergreifende Anfragen unterstützen zu lassen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage