如何在 Compojure 中将 CORS 与 JSON 响应一起使用?

How to use CORS with JSON Response in Compojure?

我正在创建一个简单的 API,其中 returns JSON 数据返回给用户。出于开发目的,我想启用 CORS,以便我的 react 前端可以在本地调用 API。目前,它抱怨

Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3001' is therefore not allowed access.

问题:如何使用ring-cors(或类似的东西)来启用 CORS 并发回 JSON 数据?

Observations:对于当前的 (app ..)(wrap-cors ...) 没有交叉原点 header.

我尝试了几种不同的顺序,但 none 似乎有效。例如,(wrap cors ...) 后跟 (wrap-defaults ...) 不起作用。

MWE

(ns qitab-api.handler
  (:require [compojure.core :refer :all]
            [compojure.route :as route]
            [ring.middleware.defaults :refer [wrap-defaults site-defaults]]
            [ring.middleware.json :refer [wrap-json-response wrap-json-body]]
            [ring.middleware.cors :refer [wrap-cors]]
            [ring.util.response :as r]))

(defroutes app-routes
   (GET "/" []
     (r/response {:hello "World!!"}))
   (route/not-found "Not Found"))

(def app
  (-> app-routes
      wrap-json-body
      wrap-json-response
     (wrap-defaults site-defaults)
     (wrap-cors :access-control-allow-origin [#".*"] :access-control-allow-
     headers [:get])))

P.S。我已经查看了其他几个与 CORS 和 Compojure 相关的问题,但是,none 其中涉及 JSON 方面。

:access-control-allow-headers 应该是 :access-control-allow-methods。然后它应该工作。