首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果使用异常处理程序,无法执行中间件?

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

Stack Overflow用户
提问于 2018-11-02 12:23:15
回答 1查看 175关注 0票数 2

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

异常处理程序

代码语言:javascript
复制
(defn- bad-request-handler
  "Handles bad requests."
  [f]

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

应用程序

代码语言:javascript
复制
(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)))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-06 10:54:47

我决定添加自己的标题,而不是使用r0man/ring-cors。我可以通过从请求中检索Access-Control-Allow-Methods值来确定:request-method的内容。但是,这使得错误的请求处理程序只能由有效的路由调用。

代码语言:javascript
复制
(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头。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53118566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档