首页 > 解决方案 > 在 Nodejs 客户端发布请求正文中构造具有重复键的表单数据

问题描述

我正在尝试发出一个包含表单数据的发布请求。但是 API REST 规范说表单数据应该是这样的:

names[]= 公司名称 1&names[]= 公司名称 2

我试过了

    form: {'names[]': "google" ,'names[]': "kraft",  'fields[]': "Country", 
        'fields[]':"ISIN"}

但服务器只接收第一个names[]fields[]。第二个被剪掉了。

服务器:发布数据:{"names"=>["kraft"], "fields"=>["ISIN"]}

然后我尝试将数组添加为值:

form: {'names[]': ["google", "kraft"], 'fields[]': ["Country","ISIN"] }

服务器:发布数据:{"names"=>[{"0"=>"google", "1"=>​​"kraft"}], "fields"=>[{"0"=>"Country", " 1"=>"ISIN"}]}

查看服务器请求,我看到它接受这种格式的正文:

BODY: names[]=google&names[]=kraft&fields[]=ISIN&fields[]=Country

但我不能在我的节点客户端构建这种形式。

我正在使用这个库:https ://www.npmjs.com/package/request

*********编辑*********

这个居然醒了: form: "names[]=google&names[]=kraft&fields[]=Country&fields[]=ISIN"

现在的问题是如何使用https://github.com/form-data/form-data形成这个字符串

我试过没有附加不起作用。

标签: node.jsrequestmultipartform-data

解决方案


建议键是唯一的,并且在其命名中没有括号。在您的情况下, names[] 和 fields[] 重复自己

const form = {
    form: {
        names: ['google', 'kraft'],
        fields: ['Country', 'ISIN']
    }
};

request.post('http://yourwebsite.com', form);

编辑

names[]=google&names[]=kraft&fields[]=ISIN&fields[]=Country 

可能有效,但根据框架/语言,只会考虑一个条目(第一个或最后一个)。所以它相当于

names[]=google&fields[]=ISIN // considering first are chosen

同样如您所见

服务器:发布数据:{"names"=>["kraft"], "fields"=>["ISIN"]}

括号被过滤掉了,所以这又是同一件事

names=google&fields=ISIN // considering first are chosen

推荐阅读