Clojure环中间件来处理url数组

Mam*_*mun 7 clojure ring

ClojureScript cljs-ajax客户端库转换{:b [1 2]}b[0]=1&b[1]=2

例如:

(http/get "http://example.com" {:b [1 2]})
Run Code Online (Sandbox Code Playgroud)

导致请求:

"http://example.com?b[0]=1&b[1]=2"
Run Code Online (Sandbox Code Playgroud)

如何在服务器端设置我的环中间件来处理这种格式?我想将其转换回原始结构:

{:b [1 2]}
Run Code Online (Sandbox Code Playgroud)

我正在使用下面的中间件,但它无法正常工作:

(ring.middleware.keyword-params/wrap-keyword-params)
(ring.middleware.params/wrap-params :encoding encoding)
(ring.middleware.nested-params/wrap-nested-params)
Run Code Online (Sandbox Code Playgroud)

Tim*_*m X 0

我建议中间件工作正常,但它的功能可能与您的期望之间存在偏差。我假设您上面的只是中间件的列表,而不是您如何调用/使用它。如果没有,你就偏离了轨道。

严格来说,您试图传递的不是嵌套参数。您真正拥有的是名称为“b[0]”和“b[1]”的参数,每个参数都有一个值。这是因为您使用的是 get 而不是 post,并且 cljs-ajax 需要将 clojure 数据结构转换为正常的查询参数格式。除非有充分的理由这样做,否则如果您使用 post 方法,而不是以 json/edn/transit 等方式获取数据并将其嵌入到正文中,您会发现生活要容易得多。它还具有额外的好处,即您的数据不会作为 URL 的一部分“公开”发送,也不会被各地的日志捕获。

与 cljs-ajax 和 post 命令一起使用的有用服务器端包是ring.middleware.format。这将简化请求正文中数据的解析,并支持多种不同的数据编码方法。