En NestJS tutorial oficial de validación. Podemos manejar el tipo de datos incorrecto de la solicitud de publicación del lado del cliente.
// dtos/CreateUserDto.ts import { IsEmail, IsNotEmpty } from 'class-validator'; export class CreateUserDto { @IsEmail() email: string; @IsNotEmpty() password: string; } // controllers/user.controller.ts @Post() async createUser(@Body() body: CreateUserDto) { return body; }Cuando creo una solicitud de publicación como
curl -X POST 'http://domain/user' -d '{"email": "john", "password": "changeme"}' -H "Content-Type: application/json"Obtendré un retorno de error esperado.
{ "statusCode": 400, "message": [ "email must be an email" ], "error": "Bad Request" }mi preocupación es un escenario que publica una solicitud con datos inesperados
curl -X POST 'http://domain/user' -d '{"email": "john@example.com", "password": "changeme", "foo": "bar"}' -H "Content-Type: application/json"Obtendré una devolución.
{ "email": "john@example.com", "password": "changeme", "foo": "bar" } Supongo que la clave foo se eliminaría o devolvería un error del sistema, pero no hace eso.
¿Cuál es la mejor manera de manejar esta condición?
Dado que NestJS está utilizando class-validator puede pasar todas las propiedades a la canalización de validación que son compatibles con las opciones del validador de clase.
ValidatorOptions { skipMissingProperties?: boolean; whitelist?: boolean; forbidNonWhitelisted?: boolean; groups?: string[]; dismissDefaultMessages?: boolean; validationError?: { target?: boolean; value?: boolean; }; forbidUnknownValues?: boolean; stopAtFirstError?: boolean; } Si desea no solo quitar valores, sino también arrojar un error cuando se pasa un valor inesperado, puede usar forbidUnknownValues: true .