我目前正在处理一个需要发送自定义GET HTTP请求的项目。
我正在使用默认的查询字符串构建器:the Documentation
const querystring = require('querystring');
问题出在Object(可能也是空数组),例如
extendTypes={}
序列化为:
extendTypes=
预期结果:
extendTypes={}
或其URI编码版本:
extendTypes%3D%7B%7D
那么,我怎么能希望这样做呢?如果使用内置模块是不可能的,哪一个可以做我想要的。
如果您需要,这是我的完整代码:
function generateGetRequest(dataMap, url) {
let queryParams = {};
let uriParams = {};
for (let [key, value] of dataMap) {
// if value is an object or an array
if (value instanceof Object || value instanceof Array) {
uriParams[key] = value;
} else {
// param working for superagent
queryParams[key] = value;
}
}
let queryParamsUri = querystring.stringify(uriParams);
console.log(queryParamsUri);
let finalUrl = url + ( (Object.keys(uriParams).length > 0) ? "?" + queryParamsUri : "");
}
答案 0 :(得分:0)
如果有人想知道,我终于找到了解决方法:
let request = require("superagent");
function generateGetRequest(dataMap, url) {
let queryParams = {};
let queryParamsUri = "";
let isFirstParam = true;
for (let [key, value] of dataMap) {
// if value is an object or an array
if (value instanceof Object) {
// Workaround for empty object or array = https://github.com/nodejs/node/issues/12234
queryParamsUri += ((!isFirstParam) ? "&": "") + key + "=" + JSON.stringify(value);
// for next call
isFirstParam = false;
} else {
// param working for superagent
queryParams[key] = value;
}
}
let finalUrl = url + ( (!isFirstParam) ? "?" + queryParamsUri : "");
return request
.get(finalUrl)
.query(queryParams);
}