NodeJs:有什么方法可以用空对象绕过 querystring.stringify 吗?
NodeJs : Any way to bypass querystring.stringify with empty Object?
我目前正在从事一个需要发送自定义 GET HTTP 请求的项目。
我正在使用默认的查询字符串生成器:the Documentation
const querystring = require('querystring');
问题是针对对象(可能也针对空数组),例如
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 : "");
}
我终于找到了解决方法,如果有人想知道:
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);
}
我目前正在从事一个需要发送自定义 GET HTTP 请求的项目。
我正在使用默认的查询字符串生成器:the Documentation
const querystring = require('querystring');
问题是针对对象(可能也针对空数组),例如
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 : "");
}
我终于找到了解决方法,如果有人想知道:
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);
}