我正在使用ring-cors并尝试为 (wrap-cors) 函数传递 cors-policy。这是我的代码的样子:
(def cors-policy
{:access-control-allow-origin [#"http://localhost:8080"]
:access-control-allow-methods [:get :put :post]})
(def dev-handler (-> #'japi/routes
wrap-reload
wrap-params
(wrap-cors cors-policy) ;; <- Here
wrap-json-response
(wrap-defaults api-defaults)
push-state/handle))
Run Code Online (Sandbox Code Playgroud)
这会导致错误:
没有为密钥提供值:{:access-control-allow-origin #{"http://localhost:8080"}, :access-control-allow-methods #{:get :post :put}}
查看(wrap-cors)的源代码,似乎错误来自尝试将 (hash-map) 应用于我的 cors-policy map。似乎我无法传递地图定义,而是在调用 (wrap-cors) 时必须显式传递键/值。有什么想法可以解决这个问题吗?
我已经(apply hash-map cors-policy)在 repl 中尝试过并且效果很好,但是当(wrap-cors identity cors-policy)再次传递这样的虚拟处理程序时会导致相同的错误。
编辑: cfrick 的答案是正确的,但请注意,我必须在我的开发处理程序定义的末尾删除 shadow-cljs'(推送状态/句柄)处理程序,以便我的设置工作。