Код Middle HTTP-сервер, Express, NestJS спрашивают часто обновлено
Роутер: сопоставление пути и параметров
Условие
Напиши matchRoute(routes, method, path). routes: массив [method, pattern, name], паттерн вида /users/:id/posts/:postId. Верни:
{ status: 200, name, params }для первого маршрута, у которого совпали метод и путь (paramsиз:сегментов, значения декодированы черезdecodeURIComponent);{ status: 405, allow: [...] }, если путь подходит под какие-то маршруты, но метод не тот (allowв порядке объявления, без повторов);{ status: 404 }, если путь не подошёл ни к одному маршруту.
Строку запроса (?...) отбрасывай, завершающий / (кроме корня) игнорируй. Параметр совпадает с одним непустым сегментом.
Примеры
matchRoute([["GET", "/users/:id", "getUser"]], "GET", "/users/42") // {"status":200,"name":"getUser","params":{"id":"42"}}
matchRoute([["GET", "/users", "list"], ["POST", "/users", "create"]], "POST", "/users?x=1") // {"status":200,"name":"create","params":{}}
matchRoute([["GET", "/users/:id", "get"], ["DELETE", "/users/:id", "del"]], "PUT", "/users/7") // {"status":405,"allow":["GET","DELETE"]}
Как подойти
Подсказки: 2
- Сравнивай пути по сегментам после
split("/"). - Запоминай методы маршрутов, у которых совпал путь: из них получится
allow.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Разбор query string с повторяющимися ключами
Следующий вопрос
Валидация тела запроса по схеме