如何在 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
。然后它应该工作。
我正在创建一个简单的 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
。然后它应该工作。