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)
我建议中间件工作正常,但它的功能可能与您的期望之间存在偏差。我假设您上面的只是中间件的列表,而不是您如何调用/使用它。如果没有,你就偏离了轨道。
严格来说,您试图传递的不是嵌套参数。您真正拥有的是名称为“b[0]”和“b[1]”的参数,每个参数都有一个值。这是因为您使用的是 get 而不是 post,并且 cljs-ajax 需要将 clojure 数据结构转换为正常的查询参数格式。除非有充分的理由这样做,否则如果您使用 post 方法,而不是以 json/edn/transit 等方式获取数据并将其嵌入到正文中,您会发现生活要容易得多。它还具有额外的好处,即您的数据不会作为 URL 的一部分“公开”发送,也不会被各地的日志捕获。
与 cljs-ajax 和 post 命令一起使用的有用服务器端包是ring.middleware.format。这将简化请求正文中数据的解析,并支持多种不同的数据编码方法。