В NestJS для обработки роутов можно использовать Decorators и Pipes.
1. Создайте кастомный Pipe (преобразователь), который будет обрабатывать и валидировать параметры роутов. В вашем случае, чтобы избежать ошибки со статусом 400 при ожидании числовой строки для параметра в пути, вы можете создать числовой Pipe и использовать его для валидации параметра.
Например, создайте `NumericPipe`, который будет проверять, является ли параметр числом:
```typescript
import { PipeTransform, Injectable, BadRequestException } from '@nestjs/common';
@Injectable()
export class NumericPipe implements PipeTransform {
transform(value: string): number {
const numericValue = Number(value);
if (Number.isNaN(numericValue)) {
throw new BadRequestException('Value should be a numeric string');
}
return numericValue;
}
}
```
2. Создайте контроллер и добавьте роуты с использованием кастомного Pipe. В вашем случае, для роутов вида `hostname.com/users/password/edit` и `hostname.com/users/password/new`, вы можете использовать параметр, требующий валидацию числовой строки:
```typescript
import { Controller, Get, Param, ParseIntPipe } from '@nestjs/common';
import { NumericPipe } from './numeric.pipe';
@Controller('users')
export class UsersController {
@Get(':id/edit')
editUser(@Param('id', NumericPipe) id: number) {
// Обрабатывайте роут /users/:id/edit с валидным числовым id
}
@Get(':id/new')
newUser(@Param('id', NumericPipe) id: number) {
// Обрабатывайте роут /users/:id/new с валидным числовым id
}
}
```
В этом примере `NumericPipe` используется вместо стандартного `ParseIntPipe` для проверки, является ли параметр числом. Если параметр не является числом, будет выброшено исключение `BadRequestException` со статусом 400.
Таким образом, при обращении к `hostname.com/users/password/edit` или `hostname.com/users/password/new` с невалидным числовым параметром, будет выброшено исключение со статусом 400.