209 похожих чатов

Всем привет, подскажите почему я передаю дто в котором описаны

поля при реализации апдейта юзера, но если передам лишний аргумент, то он будет заапдейчен?
Контроллер
@Patch('/:id')
updateUser(@Param('id') id: string, @Body() data: UpdateUserDto): Promise<User> {
return this.usersService.update(parseInt(id), data);
}

Dto
export class UpdateUserDto {
@IsOptional()
readonly first_name: string;

@IsOptional()
readonly last_name: string;

@IsOptional()
readonly username: string;
}

Метод update в сервисе
async update(id: number, args: UpdateUserDto) {
const user = await this.findOne(id);

Object.assign(user, args);

return await this.userRepository.save(user)
}

2 ответов

14 просмотров

а почему апдейт делаете через Object.assign(user, args); ?

Для того, чтобы в сервис в аргумент args пришли только те поля, которые указаны в DTO и них есть декораторы class-validator'a. Я бы добавил глобал ValidationPipe. https://docs.nestjs.com/techniques/validation#using-the-built-in-validationpipe async function bootstrap() { ... app.useGlobalPipes(new ValidationPipe({whitelist:true})); ... }

Похожие вопросы

Карта сайта