Модуль querystring в Node.js

Java FileВстроенные модули 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: Указывает максимальное количество ключей для разбора, по умолчанию 1000
    • decodeURIComponent: Функция, используемая для декодирования, по умолчаниюquerystring.unescape()

Пример кода:

Пример

const querystring = require('querystring');

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 querystring = require('querystring');

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 querystring = require('querystring');

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 http = require('http');
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 querystring = require('querystring');

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'

Важные замечания

  1. Проблемы с кодированием: По умолчанию querystring кодирует/декодирует специальные символы. Если нужно настроить метод кодирования, вы можете передатьencodeURIComponentилиdecodeURIComponentфункцию.

  2. Типы данных: Все разобранные значения имеют строковый тип, и их нужно вручную преобразовать в другие типы (например, числа, логические значения и т. д.).

  3. Вложенные объекты: Модуль querystring не поддерживает разбор или сериализацию вложенных объектов. Если нужно обрабатывать сложные структуры данных, можно рассмотреть использование формата JSON.

  4. Безопасные для URL символы: Пробелы кодируются как+вместо%20, что отличается отencodeURIComponentв поведении.


Альтернативы

Хотя модуль querystring очень практичен, новые версии Node.js рекомендуют использовать API URL и URLSearchParams, которые обеспечивают более современную и комплексную функциональность обработки URL.

Пример

// Пример использования URLSearchParams
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.

Java FileВстроенные модули Node.js

Другие расширения