Node.js – 在HTTP GET请求查询中发送时,数组被转换为对象

以下Node.js代码:

var request = require('request'); var getLibs = function() { var options = { packages: ['example1', 'example2', 'example3'], os: 'linux', pack_type: 'npm' } request({url:'http://localhost:3000/package', qs:options}, function (error , response, body) { if (! error && response.statusCode == 200) { console.log(body); } else if (error) { console.log(error); } else{ console.log(response.statusCode); } }); }(); 

发送如下所示的以​​下http GET请求查询:

 {"packages"=>{"0"=>"example1", "1"=>"example2", "2"=>"example3"}, "os"=>"linux", "pack_type"=>"npm"} 

我该如何优化这个请求才能像这样收到:

 {"packages"=>["example1", "example2", "example3"], "os"=>"linux", "pack_type"=>"npm"} 

注意。 REST API是在Ruby on Rails中构build的

如果需要按照原样接收数组,则可以将useQuerystring设置为true

更新:下面的代码示例中的list键已经更改为'list[]' ,以便OP的ruby后端可以成功parsing数组。

以下是示例代码:

 const request = require('request'); let data = { 'name': 'John', 'list[]': ['XXX', 'YYY', 'ZZZ'] }; request({ url: 'https://requestb.in/1fg1v0i1', qs: data, useQuerystring: true }, function(err, res, body) { // ... }); 

这样,当发送HTTP GET请求时,查询参数将是:

 ?name=John&list[]=XXX&list[]=YYY&list[]=ZZZ 

并且list字段将被parsing为['XXX', 'YYY', 'ZZZ']


没有useQuerystring (默认值为false ),查询参数将是:

 ?name=John&list[][0]=XXX&list[][1]=YYY&list[][2]=ZZZ 

我终于find了一个修复。 我使用“qs”将{optionsForce}与{arrayFormat:'括号'}串联起来,然后串联到以'?'结尾的url。 如下:

 var request = require('request'); var qs1 = require('qs'); var getLibs = function() { var options = qs1.stringify({ packages: ['example1', 'example2', 'example3'], os: 'linux', pack_type: 'npm' },{ arrayFormat : 'brackets' }); request({url:'http://localhost:3000/package?' + options}, function (error , response, body) { if (! error && response.statusCode == 200) { console.log(body); } else if (error) { console.log(error); } else{ console.log(response.statusCode); } }); }(); 

注意:我试图避免连接到url,但所有的响应都有代码400