Clojure 如果使用异常处理程序,则无法执行中间件?
当存在针对我的api端点的错误请求时,不返回访问控制标头。我相信这是因为我使用的异常处理程序可能会阻止中间件运行。我想知道我如何仍然可以为这个路由执行中间件,并将cors头附加到错误请求的响应中 异常处理程序Clojure 如果使用异常处理程序,则无法执行中间件?,clojure,cors,compojure,compojure-api,Clojure,Cors,Compojure,Compojure Api,当存在针对我的api端点的错误请求时,不返回访问控制标头。我相信这是因为我使用的异常处理程序可能会阻止中间件运行。我想知道我如何仍然可以为这个路由执行中间件,并将cors头附加到错误请求的响应中 异常处理程序 (defn- bad-request-handler "Handles bad requests." [f] (f (ring/response {:status "bad request"}))) 应用程序 我决定附加我自己的头,而不是使用r0man/ring-c
(defn- bad-request-handler
"Handles bad requests."
[f]
(f
(ring/response {:status "bad request"})))
应用程序
我决定附加我自己的头,而不是使用r0man/ring-cors。 我可以通过从请求中检索
: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头
(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"}))))