Код 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
  1. Сравнивай пути по сегментам после split("/").
  2. Запоминай методы маршрутов, у которых совпал путь: из них получится allow.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.