Разрешение перекрестных запросов в 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 ...

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

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

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

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