gpt4 book ai didi

Clojure ring-cors/wrap-cors 设置

转载 作者:行者123 更新时间:2023-12-04 02:28:43 24 4
gpt4 key购买 nike

我正在使用 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))

这会导致错误:

No value supplied for key: {:access-control-allow-origin#{"http://localhost:8080"}, :access-control-allow-methods #{:get :post :put}}

查看 (wrap-cors) 的源代码看起来错误来自 trying to apply (hash-map) to my cors-policy map .似乎我无法传递映射定义,但我必须在调用 (wrap-cors) 时显式传递键/值。有解决这个问题的想法吗?

我已经在 repl 中尝试了 (apply hash-map cors-policy) 并且效果很好,但是当传递一个虚拟处理程序时,例如 (wrap-cors identity cors-policy ) 这再次导致相同的错误。

编辑: cfrick 的回答是正确的,但请注意,我必须在我的开发处理程序定义末尾删除 shadow-cljs'(推送状态/句柄)处理程序设置工作。

最佳答案

包装器使用了一种有时会看到并关注的“模式”“人类消费”的功能。它需要“休息”的参数并将其成对转换为映射。这已经是“嗯”了对人类来说是完全不利的(例如作为参数传递)。

你必须这样调用它:

(wrap-cors $handler :a 1 :b 2)

所以最简单的方法是:

(def cors-policy
[:a 1
:b 2])

(apply wrap-cors $handler cors-policy)

或者如果你想坚持使用 map (恕我直言,这是一个好方法),你必须事先展平 map 。例如

(apply wrap-cors $handler (into [] cat cors-policy))

但是使用线程宏 -> 这变得更难做到现在(-> 只是一个宏,生成的代码将是 (apply $handler wrap-cors ...),这是意想不到的。

所以在这一点上我会添加我自己的 defn 只接受处理程序再次。例如。像

(defn cors-wrapper
[handler config-map]
(apply wrap-cors handler (into [] cat config-map)))

关于Clojure ring-cors/wrap-cors 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65582216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com