Разрешение перекрестных запросов в Yesod
Мое приложение использует букмарклет, и мне нужно разрешить CORS дляMyRouteR
поэтому мой код букмарклета может использовать этот маршрут для запросов AJAX.
В моем первом проекте конфига / маршрутов я далMyRouteR
поддержка только одного метода запроса, PUT. Но оказалось, что яТакже необходимо поддерживать метод OPTIONS, который браузеры используют для запросов предполётной проверки CORS.
Я кончил со следующим в конфиге / маршрутах:
/myroute MyRouteR PUT OPTIONS
Я надеялся, что в шаблоне Haskell будет какая-то соответствующая машина, которая обрабатывает конфигурацию / маршруты, так что добавление ОПЦИЙ к этому маршруту 'Список методов s автоматически приведет к поддержке CORS, но без кубиков. Не конец света, но это имело бы смысл и было бы так элегантно.
Чтобы заставить 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 ...
Это работает, но кажется немного не-есодическим, потому чтоЭто так шаблонно. Итак, два вопроса:
У нас есть лучшее прилагательное, чем есодик?Есть ли другой, лучший способ, чтобы маршрут поддерживал запросы из разных источников?