Moja aplikacja używa skryptozakładki i muszę zezwalać CORS na MyRouteR
, aby mój kod bookmarkletu mógł korzystać z tej trasy dla żądań AJAX.Zezwalanie na żądania różnych źródeł w Yesod
W moim pierwszym szkicu konfiguracji/tras dałem MyRouteR
obsługę tylko jednej metody żądania, PUT. Ale okazało się (duh), że będę musiał obsługiwać również metodę OPTIONS, które przeglądarki używają dla żądań wstępnych CORS.
skończyło się z następujących w config/trasach:
/myroute MyRouteR PUT OPTIONS
Miałam nadzieję, nie byłoby pewne istotne maszyny w szablonie Haskell, który przetwarza config/trasy tak, że dodanie opcji do tego Lista metod trasy może automagicznie skutkować obsługą CORS, ale bez kości. Nie koniec świata, ale miałoby to sens i byłoby eleganckie w ten sposób.
Aby uczynić pracę CORS, dałem ROUTE procedurę obsługi opcji:
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 ...
To działa, ale czuje się lekko un-Yesodic bo to tak boilerplate. Tak więc, dwa pytania:
- Czy mamy lepszy przymiotnik niż Yesodic?
- Czy istnieje inny, lepszy sposób na umożliwienie routingu obsługi wniosków o krzyż?
zmieniłem 'setHeader' do' addHeader' powyżej ponieważ 'setHeader' została zaniechana w tym czasie –