Working with Query Strings

1. Parsing Query Strings (querystring.parse)

Example

import qs from "node:querystring";
qs.parse("a=1&b=2&a=3"); // { a: ["1","3"], b: "2" }
Note: The querystring module is LEGACY. Prefer URLSearchParams.

2. Stringifying Objects (querystring.stringify)

CallOutput
qs.stringify({a:1,b:2})a=1&b=2
qs.stringify(o, ";", ":")Custom separators

3. Encoding Values (querystring.escape)

APIEquivalent
qs.escapeencodeURIComponent

4. Decoding Values (querystring.unescape)

APIEquivalent
qs.unescapedecodeURIComponent

5. Handling Arrays in Query Strings

ConventionExample
Repeated keytag=a&tag=b
Bracket notationtag[]=a&tag[]=b (qs library)
Comma-separatedtag=a,b

6. Using Custom Separators (& vs ;)

Example

qs.parse("a=1;b=2", ";"); // { a: "1", b: "2" }

7. URLSearchParams vs querystring

FeatureURLSearchParamsquerystring
StandardWHATWGNode-only
Repeated keysMultiple entriesCoerced to array
IterationIterablePlain object
RecommendedLegacy

8. Building Query Strings from Objects

Example

const sp = new URLSearchParams(Object.entries({ q: "node", page: 2 }));
console.log(sp.toString()); // q=node&page=2

9. Handling Nested Objects

ToolReason
qs npm packageEncodes nested objects as a[b]=1
Native APIsDon't support nesting

10. Using qs Package for Complex Queries

Example

import qs from "qs";
qs.stringify({ filter: { status: "active", age: { gt: 18 } } });
// filter[status]=active&filter[age][gt]=18
OptionUse
arrayFormat: "brackets"a[]=1&a[]=2
arrayFormat: "comma"a=1,2
encode: falseSkip URI encoding