Не удается выполнить промежуточное ПО, если используется обработчик исключений? - PullRequest
0 голосов
/ 02 ноября 2018

wrap-cors не возвращает заголовки контроля доступа, когда есть неверный запрос к моей конечной точке API. Я считаю, что это потому, что я использую обработчик исключений, который может блокировать запуск промежуточного программного обеспечения. Я хочу знать, как я все еще могу выполнить промежуточное программное обеспечение для этого маршрута и добавить заголовки cors к ответу на неверные запросы.

обработчик исключений

(defn- bad-request-handler
  "Handles bad requests."
  [f]

  (f
    (ring/response {:status "bad request"})))

Приложение

(def app
  (api
    {:exceptions {:handlers
                          {::ex/request-validation (bad-request-handler response/bad-request)}}}

    (POST "/" [] :body [item {(schema/required-key :item) schema/Bool}]
             :middleware [#(wrap-cors % :access-control-allow-origin [#".*"]
                                      :access-control-allow-methods [:post])]

             :responses {200 {:description "ok"}
                         400 {:description "bad request"}} item)))

1 Ответ

0 голосов
/ 06 ноября 2018

Я решил добавить свои собственные заголовки вместо использования r0man / ring-cors. Я могу определить содержимое Access-Control-Allow-Methods, получив значение :request-method из запроса. Однако это предполагает, что обработчик плохих запросов будет вызываться только по действительным маршрутам.

(defn- append-cors
  "Allow requests from all origins"
  [methods]

  {"Access-Control-Allow-Origin"  "*"
   "Access-Control-Allow-Methods" methods})


(defn- bad-request-handler
  "Handles bad requests."
  [f]

  (fn [^Exception e data request]
    (->
      (f request)
      (update-in [:headers] merge (->
                                    (request :request-method)
                                    (name)
                                    (clojure.string/upper-case)
                                    (append-cors)))
      (assoc :body {:status "bad request"}))))

Я все еще не совсем уверен, почему заголовки cors добавляются только тогда, когда запрос разрешен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...