Перейти к основному содержимому

Один обработчик на маршрут

Маршрутизация решает, какой обработчик отвечает на какой запрос. У модуля node:http нет собственного маршрутизатора: он передаёт каждый запрос в одну функцию, а вы решаете, куда его направить. Это занимает всего несколько строк — и, написав их один раз, вы увидите, что именно делает маршрутизатор.

Составные части — это метод запроса (req.method), его путь и его строка запроса. new URL(req.url ?? "/", "http://localhost") отделяет путь от строки запроса, потому что req.url — это только часть после хоста. Шаблон вроде "/users/{id}" затем сопоставляется сегмент за сегментом, и совпавшая часть передаётся обработчику как params.id. Фреймворки добавляют сверху удобства, но этого хватает для повседневных задач.


Маршруты и значения из пути

Два маршрута: список по адресу /users и один пользователь по /users/{id}. Часть в фигурных скобках — это параметр пути, тот кусок URL, который является данными.

Маршрут с параметром пути

Один и тот же маршрутизатор направляет /users в один обработчик, а /users/7 — в другой, и matchPath передаёт число 7 обработчику как params.id — сам обработчик не режет строки.

Prompt
Напишите программу на TypeScript с небольшим маршрутизатором поверх node:http и двумя маршрутами: GET /users, возвращающий строку со списком, и GET /users/{id}, обработчик которого получает id как параметр пути. Запустите сервер на порту 0, обратитесь к обоим маршрутам с помощью fetch и выведите ответы.
Вывод: программа на TypeScript и захваченный вывод

Параметры запроса

Часть после ? содержит параметры запроса — настройки запроса, например текст поиска или ограничение: /search?q=api&limit=2. Они берутся из url.searchParams, всегда в виде строк, а get() возвращает null для отсутствующего параметра — поэтому ?? может подставить значение по умолчанию.

Правило простое: путь говорит, какой ресурс, а строка запроса говорит, как — фильтры, сортировка, постраничный вывод.

Чтение строки запроса

Обработчик читает q и limit из строки запроса. Во втором запросе limit пропущен, поэтому обработчик возвращается к значению 10 — отсутствующие параметры это нормально, учитывайте их.

Prompt
Напишите программу на TypeScript с обработчиком /search, который читает параметры запроса q и limit из url.searchParams, используя 10 как ограничение по умолчанию, когда оно отсутствует. Запустите сервер на порту 0, обратитесь к нему один раз с обоими параметрами и один раз только с q, выводя ответы.
Вывод: программа на TypeScript и захваченный вывод