Skip to content

Commit

Permalink
fix: use querystring to stringify data (#489)
Browse files Browse the repository at this point in the history
  • Loading branch information
killagu authored Feb 20, 2024
1 parent f6ac20b commit ee9a786
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 11 deletions.
16 changes: 7 additions & 9 deletions src/HttpClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import { basename } from 'node:path';
import { createReadStream } from 'node:fs';
import { format as urlFormat } from 'node:url';
import { performance } from 'node:perf_hooks';
import querystring from 'node:querystring';
import {
FormData as FormDataNative,
request as undiciRequest,
Expand Down Expand Up @@ -503,18 +504,15 @@ export class HttpClient extends EventEmitter {
|| isReadable(args.data);
if (isGETOrHEAD) {
if (!isStringOrBufferOrReadable) {
let query;
if (args.nestedQuerystring) {
const querystring = qs.stringify(args.data);
// reset the requestUrl
const href = requestUrl.href;
requestUrl = new URL(href + (href.includes('?') ? '&' : '?') + querystring);
query = qs.stringify(args.data);
} else {
for (const field in args.data) {
const fieldValue = args.data[field];
if (fieldValue === undefined) continue;
requestUrl.searchParams.append(field, fieldValue);
}
query = querystring.stringify(args.data);
}
// reset the requestUrl
const href = requestUrl.href;
requestUrl = new URL(href + (href.includes('?') ? '&' : '?') + query);
}
} else {
if (isStringOrBufferOrReadable) {
Expand Down
5 changes: 3 additions & 2 deletions test/options.data.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ describe('options.data.test.ts', () => {
d: 1111,
e() { return ''; },
f: true,
g: [ 'a', 'b' ],
},
dataType: 'json',
});
Expand All @@ -37,7 +38,7 @@ describe('options.data.test.ts', () => {
assert.equal(response.data.method, 'GET');
assert(response.url.startsWith(_url));
assert(!response.redirected);
assert.equal(response.data.url, '/?sql=SELECT+*+from+table&data=%E5%93%88%E5%93%88&c=2222&d=1111&e=e%28%29+%7B%0A++++++++++return+%22%22%3B%0A++++++++%7D&f=true');
assert.equal(response.data.url, '/?sql=SELECT%20*%20from%20table&data=%E5%93%88%E5%93%88&b=&c=2222&d=1111&e=&f=true&g=a&g=b');
const url = new URL(response.data.href);
assert.equal(url.searchParams.get('sql'), 'SELECT * from table');
assert.equal(url.searchParams.get('data'), '哈哈');
Expand Down Expand Up @@ -164,7 +165,7 @@ describe('options.data.test.ts', () => {
assert(response.url.startsWith(_url));
assert(!response.redirected);
// console.log(response.data);
assert.equal(response.data.url, '/?that=in_path&sql=SELECT+*+from+table&data=%E5%93%88%E5%93%88');
assert.equal(response.data.url, '/?that=in_path&sql=SELECT%20*%20from%20table&data=%E5%93%88%E5%93%88');
const url = new URL(response.data.href);
assert.equal(url.searchParams.get('sql'), 'SELECT * from table');
assert.equal(url.searchParams.get('data'), '哈哈');
Expand Down

0 comments on commit ee9a786

Please sign in to comment.