JS: Синхронная асинхронность
Теория: URL
При работе с http возникает потребность в библиотеках, позволяющих манипулировать частями адресов, разбирать их, а также собирать обратно. Node.js предоставляет такие модули из коробки.
Url
Это модуль, основной задачей которого является парсинг строчки адреса для извлечения составных частей.
То же самое можно визуализировать:
┌─────────────────────────────────────────────────────────────────────────────┐
│ href │
├──────────┬┬───────────┬─────────────────┬───────────────────────────┬───────┤
│ protocol ││ auth │ host │ path │ hash │
│ ││ ├──────────┬──────┼──────────┬────────────────┤ │
│ ││ │ hostname │ port │ pathname │ search │ │
│ ││ │ │ │ ├─┬──────────────┤ │
│ ││ │ │ │ │ │ query │ │
" http: // user:pass @ host.com : 8080 /p/a/t/h ? query=string #hash "
│ ││ │ │ │ │ │ │ │
└──────────┴┴───────────┴──────────┴──────┴──────────┴─┴──────────────┴───────┘
(all spaces in the "" line should be ignored -- they're purely for formatting)
Как видно, этот модуль дал нам возможность извлечь query params из адреса, но в виде строки. Дальше, как вы уже догадались, нам понадобится еще один модуль - querystring.
Querystring
Он также входит в поставку Node.js и работает очень просто:
Здесь необходимо сделать пояснение. Спецификация http разрешает использовать в
адресах только те символы, которые входят в ASCII character-set. Возникает вопрос:
как быть, если у нас есть другие символы? А для этого применяется специальное кодирование,
называемое url encoding. Например, слово скрипт будет закодировано в строку:
%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82.
Модуль querystring делает кодирование/декодирование автоматически, это видно в примере
выше. Но если вам вдруг понадобилось делать это руками, то js спешит на помощь:
А теперь собираем все вместе:
Кроме ручного превращения строки в объект через querystring можно воспользоваться классом URLSearchParams:
Обратная задача – конструирование адреса выполняется через создание объекта URL и его наполнение:
Для более полного понимания работы этих объектов и методов нужно смотреть в документацию и экспериментировать.