Модуль querystring в Node.js
querystring — это встроенный основной модуль в Node.js, предназначенный специально для разбора и форматирования строк запроса URL. Строка запроса — это часть URL после вопросительного знака (?), обычно состоящая из пар ключ-значение, например:?name=John&age=30。
Этот модуль очень практичен в таких сценариях, как передача данных между фронтендом и бэкендом и разработка API, помогая разработчикам легко обрабатывать параметры URL.
Объяснение основных методов
querystring.parse(str[, sep[, eq[, options]]])
Разбирает строку запроса в объект JavaScript.
Описание параметров:
str: строка запроса для разбораsep(Необязательно): Разделитель, используемый для разделения пар ключ-значение, по умолчанию'&'eq(Необязательно): Разделитель, используемый для разделения ключей и значений, по умолчанию'='options(Необязательно): Объект конфигурацииmaxKeys: Указывает максимальное количество ключей для разбора, по умолчанию 1000decodeURIComponent: Функция, используемая для декодирования, по умолчаниюquerystring.unescape()
Пример кода:
Пример
const query = 'name=John&age=30&city=New+York';
const parsed = querystring.parse(query);
console.log(parsed);
// Вывод: { name: 'John', age: '30', city: 'New York' }
querystring.stringify(obj[, sep[, eq[, options]]])
Сериализует объект JavaScript в строку запроса.
Описание параметров:
obj: Объект для сериализацииsep(Необязательно): Разделитель пар ключ-значение, по умолчанию'&'eq(Необязательно): Разделитель ключа и значения, по умолчанию'='options(Необязательно): Объект конфигурацииencodeURIComponent: Функция, используемая для кодирования, по умолчаниюquerystring.escape()
Пример кода:
Пример
const obj = {
name: 'John Doe',
age: 25,
occupation: 'Software Developer'
};
const stringified = querystring.stringify(obj);
console.log(stringified);
// Вывод: 'name=John%20Doe&age=25&occupation=Software%20Developer'
querystring.escape(str) и querystring.unescape(str)
Эти два метода используются для кодирования и декодирования специальных символов в строках запроса соответственно.
Пример кода:
Пример
const str = 'Hello World!';
const escaped = querystring.escape(str);
console.log(escaped); // Вывод: 'Hello%20World%21'
const unescaped = querystring.unescape(escaped);
console.log(unescaped); // Вывод: 'Hello World!'
Практические сценарии применения
1. Обработка параметров GET-запроса
Пример
const querystring = require('querystring');
http.createServer((req, res) => {
if (req.url.includes('?')) {
const queryString = req.url.split('?')[1];
const params = querystring.parse(queryString);
console.log(params);
res.end(`Полученные параметры: ${JSON.stringify(params)}`);
} else {
res.end('Параметры запроса не получены');
}
}).listen(3000);
2. Создание строк запросов API
Пример
const apiParams = {
q: 'node.js',
page: 1,
limit: 10,
sort: 'desc'
};
const apiUrl = `https://api.example.com/search?${querystring.stringify(apiParams)}`;
console.log(apiUrl);
// Вывод: 'https://api.example.com/search?q=node.js&page=1&limit=10&sort=desc'
Важные замечания
Проблемы с кодированием: По умолчанию querystring кодирует/декодирует специальные символы. Если нужно настроить метод кодирования, вы можете передать
encodeURIComponentилиdecodeURIComponentфункцию.Типы данных: Все разобранные значения имеют строковый тип, и их нужно вручную преобразовать в другие типы (например, числа, логические значения и т. д.).
Вложенные объекты: Модуль querystring не поддерживает разбор или сериализацию вложенных объектов. Если нужно обрабатывать сложные структуры данных, можно рассмотреть использование формата JSON.
Безопасные для URL символы: Пробелы кодируются как
+вместо%20, что отличается отencodeURIComponentв поведении.
Альтернативы
Хотя модуль querystring очень практичен, новые версии Node.js рекомендуют использовать API URL и URLSearchParams, которые обеспечивают более современную и комплексную функциональность обработки URL.
Пример
const params = new URLSearchParams('name=John&age=30');
console.log(params.get('name')); // Вывод: 'John'
Итог
Модуль querystring — это мощный инструмент для обработки строк запроса в Node.js, особенно подходящий для обработки простых данных в виде пар ключ-значение. Освоение его основных методов (parse, stringify, escape, unescape) может значительно повысить эффективность разработки. Для более сложных задач обработки URL можно рассмотреть использование API URL и URLSearchParams.
Другие расширения
Встроенные модули Node.js