Как преобразовать входные данные с помощью NestJS и TypeORM - PullRequest
0 голосов
/ 26 июня 2019

Я хочу создать функциональность, в которой я могу преобразовывать входящие данные до того, как они попадут в базу данных.Допустим, мы хотим убедиться, что при создании нового пользователя значения атрибутов firstName и lastName всегда начинаются с заглавной буквы.Или другой замечательный пример - предотвращение проблем с входом в систему и сохранение адреса электронной почты пользователей всегда строчными буквами.

Я взглянул на документацию по трубе nestJS, но она носит общий характер.Я хочу иметь возможность указать, какие поля нуждаются в преобразовании, и я не хочу создавать канал для каждого атрибута или конечной точки, которая нуждается в преобразовании.

Я также пробовал декоратор @Transform из пакета 'class-transformer', но, похоже, это не работает.

export class UserRoleCreateDto {
  @IsDefined()
  @IsString()
  @IsNotEmpty()
  @Transform((name) => name.toUpperCase())
  readonly name;
}

Ожидаемым результатом должно быть имя заглавными буквами, но это не так.

Кто-нибудь есть идеи или примеры, как реализовать правильное преобразование ввода для NestJS / TypeORM, прежде чем он попадет в базу данных?

Спасибо за ваше время!

1 Ответ

0 голосов
/ 02 июля 2019

Вот небольшой рабочий пример

  @UsePipes(new ValidationPipe({transform: true}))
  @Get('test_input')
  async testInput(@Query() data: UserRoleCreateDto): Promise<any> {

    return data;
  }

и проверка в bash:

curl 'http://localhost:3060/test_input?name=hello'

{"name":"HELLO"}

Убедитесь, что у вас есть ValidationPipe декоратор и особенно опция transform: true, без них она не работает. transform: true автоматически преобразует входные данные в экземпляр класса.

Подробнее о проверке на странице документации nestjs - ссылка

Кроме того, на всякий случай вместо @Query() декоратора вы можете использовать @Body() для данных POST или @Param() для параметров URL

...