Разрешение перекрестных запросов в Yesod

Мое приложение использует букмарклет, и мне нужно разрешить CORS дляMyRouteR поэтому мой код букмарклета может использовать этот маршрут для запросов AJAX.

В моем первом проекте конфига / маршрутов я далMyRouteR поддержка только одного метода запроса, PUT. Но оказалось (не очень), что мне нужно было бы также поддерживать метод OPTIONS, который браузеры используют для запросов предварительной проверки CORS.

Я кончил со следующим в конфиге / маршрутах:

/myroute MyRouteR PUT OPTIONS

Я надеялся, что в Template Haskell будет какой-то соответствующий механизм, который обрабатывает config / маршруты, так что добавление OPTIONS в список методов этого маршрута автоматически приведет к поддержке 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 ...

Это работает, но кажется немного не-есодическим, потому что это так шаблонно. Итак, два вопроса:

У нас есть лучшее прилагательное, чем есодик?Есть ли другой, лучший способ, чтобы маршрут поддерживал запросы из разных источников?

Ответы на вопрос(1)

Ваш ответ на вопрос