Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 如果使用异常处理程序,则无法执行中间件?_Clojure_Cors_Compojure_Compojure Api - Fatal编程技术网

Clojure 如果使用异常处理程序,则无法执行中间件?

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

当存在针对我的api端点的错误请求时,不返回访问控制标头。我相信这是因为我使用的异常处理程序可能会阻止中间件运行。我想知道我如何仍然可以为这个路由执行中间件,并将cors头附加到错误请求的响应中

异常处理程序

(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"}))))