如何在Compojure中使用CORS和JSON响应?

7
我正在创建一个简单的 API,该 API 返回 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 数据?
观察结果:当前的 (app ..) 中,(wrap-cors ...) 不提供跨域头。
我尝试了几种顺序的变化,但都没有成功。例如,(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相关的问题,然而,它们中没有一个处理JSON方面的问题。

1个回答

9

:access-control-allow-headers 应该改为 :access-control-allow-methods。这样就可以正常工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接