Исходя из вашего репозитория кода, вы не используете параметры URL, а скорее используете параметры запроса. Разница между ними заключается в том, как они передаются на сервер и как их просят сервер прослушивать их.
Параметры запроса
С параметрами запроса вы передаете их на сервер. начиная с ?
в URL и конкатенируя каждый последующий, используя &
. Пример может выглядеть примерно так: http://localhost:3000?name=Test&id=a26408f3-69eb-4443-8af7-474b896a9e70
. Обратите внимание, что есть два параметра Query, один с именем name
и один с именем id
. В Nest, чтобы получить эти параметры в вашем обработчике маршрута, вы должны использовать декоратор @Query()
. Пример класса может выглядеть следующим образом:
@Controller()
export class AppController {
@Get()
getHello(@Query() query: { name: string, id: string }) {
return `Hello ${name}, your ID is ${id}`;
}
}
Обратите внимание на то, что с указанным выше URL вызываемый маршрут является базовым (/
), с добавленными параметрами запроса.
Параметры URL
Параметры URL - это способ динамически строить маршруты без необходимости указывать каждый возможный URL. Это полезно для таких вещей, как идентификаторы, которые генерируются динамически. Принимая URL-адрес, аналогичный приведенному выше, образец URL на этот раз может выглядеть как http://localhost:3000/Test/a26408f3-69eb-4443-8af7-474b896a9e70
. Обратите внимание, что на этот раз нет ?
или &
, и он выглядит как полный URL. Чтобы указать URL-параметры в гнезде, вам необходимо ввести двоеточие (:
) перед именем параметра в декораторе объявления ресурсов вместе с любой другой необходимой частью пути. Затем, чтобы получить доступ к параметрам URL, вам нужно использовать декоратор @Param()
в обработчике маршрута, аналогично тому, как вы использовали бы декоратор @Query()
. Пример класса для этого будет
@Controller()
export class AppController {
@Get(':name/:id')
getHello(@Param() params: { name: string, id: string })
return `Hello ${name}, your ID is ${id}`;
}
}
Проблема и решение
В настоящее время вы вызываете http://localhost/users/update/<ID>
, действуя так, как будто вы используете параметры URL, но в вашем обработчике маршрута вы ожидаем @Query()
захватить идентификатор. Из-за этого нет обработчика для поиска /users/update/:id
, и поэтому вы получаете 404 взамен. Вы можете либо изменить свой сервер для прослушивания параметров URL, как описано выше, либо изменить URL-адрес для отправки запроса с использованием параметров запроса вместо параметров URL.