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中构建的

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

UPDATE:以下代码示例中的list键已更改为'list[]' ,因此OP的ruby后端可以成功解析数组。

这是示例代码:

 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字段将被解析为['XXX', 'YYY', 'ZZZ']


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

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

我终于找到了解决办法。 我使用’qs’用’arrayFormat:’bracket’}对’options’进行字符串化,然后将其连接到以’?’结尾的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