以下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中构建的
答案 0 :(得分:0)
我终于找到了解决办法。我使用'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
答案 1 :(得分:0)
可以使用请求库本身解决此问题。 请求在内部使用qs.stringify。您可以传递q选项来请求将用于解析数组参数的参数。
您不需要在url后面附加内容,这会使读者有疑问为什么这样做。
参考:https://github.com/request/request#requestoptions-callback
const options = { method: 'GET', uri: 'http://localhost:3000/package', qs: { packages: ['example1', 'example2', 'example3'], os: 'linux', pack_type: 'npm' }, qsStringifyOptions: { arrayFormat: 'repeat' // You could use one of indices|brackets|repeat }, json: true };