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);
}