Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript Nest.js。其中转换(序列化)客户端';在服务中使用数据之前,先将其保存_Typescript_Nestjs_Class Validator_Class Transformer - Fatal编程技术网

Typescript Nest.js。其中转换(序列化)客户端';在服务中使用数据之前,先将其保存

Typescript Nest.js。其中转换(序列化)客户端';在服务中使用数据之前,先将其保存,typescript,nestjs,class-validator,class-transformer,Typescript,Nestjs,Class Validator,Class Transformer,我应该在哪里转换来自客户端的收入数据,以使用service.ts文件中的转换值 例如,我从客户端获取JSON数据,如下所示 { phone: 8-999-999-99-99 } 我有一个注册客户端.dto文件: import { IsNotEmpty } from 'class-validator'; export class RegisterClientDTO { @IsNotEmpty() readonly phone: string; } // imports here.

我应该在哪里转换来自客户端的收入数据,以使用service.ts文件中的转换值

例如,我从客户端获取JSON数据,如下所示

{
 phone: 8-999-999-99-99
}
我有一个
注册客户端.dto
文件:

import { IsNotEmpty } from 'class-validator';

export class RegisterClientDTO {
  @IsNotEmpty()
  readonly phone: string;
}

// imports here...

@Controller('clients')
export class ClientController {
  constructor(private readonly clientService: ClientService) {}

  @Post()
  @UsePipes(new ValidationPipe())
  create(@Body() registerClientDTO: RegisterClientDTO) {
    return this.clientService.create(registerClientDTO);
  }
}
// imports here 
@Injectable()
export class ClientService {
  constructor(
    @InjectRepository(ClientEntity)
    private readonly clientRepository: Repository<ClientEntity>,
  ) {}
  async create(clientDTO: RegisterClientDTO): Promise<any> {
    const { phone } = clientDTO;
    console.log(phone); // phone is 8-999-999-99-99, but i want 89999999999

  }
}
我有一个
client.controller.ts
文件:

import { IsNotEmpty } from 'class-validator';

export class RegisterClientDTO {
  @IsNotEmpty()
  readonly phone: string;
}

// imports here...

@Controller('clients')
export class ClientController {
  constructor(private readonly clientService: ClientService) {}

  @Post()
  @UsePipes(new ValidationPipe())
  create(@Body() registerClientDTO: RegisterClientDTO) {
    return this.clientService.create(registerClientDTO);
  }
}
// imports here 
@Injectable()
export class ClientService {
  constructor(
    @InjectRepository(ClientEntity)
    private readonly clientRepository: Repository<ClientEntity>,
  ) {}
  async create(clientDTO: RegisterClientDTO): Promise<any> {
    const { phone } = clientDTO;
    console.log(phone); // phone is 8-999-999-99-99, but i want 89999999999

  }
}
我有一个
client.service.ts
文件:

import { IsNotEmpty } from 'class-validator';

export class RegisterClientDTO {
  @IsNotEmpty()
  readonly phone: string;
}

// imports here...

@Controller('clients')
export class ClientController {
  constructor(private readonly clientService: ClientService) {}

  @Post()
  @UsePipes(new ValidationPipe())
  create(@Body() registerClientDTO: RegisterClientDTO) {
    return this.clientService.create(registerClientDTO);
  }
}
// imports here 
@Injectable()
export class ClientService {
  constructor(
    @InjectRepository(ClientEntity)
    private readonly clientRepository: Repository<ClientEntity>,
  ) {}
  async create(clientDTO: RegisterClientDTO): Promise<any> {
    const { phone } = clientDTO;
    console.log(phone); // phone is 8-999-999-99-99, but i want 89999999999

  }
}
//此处导入
@可注射()
导出类客户端服务{
建造师(
@注入存储库(客户)
专用只读客户端存储库:存储库,
) {}
异步创建(clientDTO:RegisterClientDTO):承诺{
const{phone}=clientDTO;
console.log(phone);//电话是8-999-999-99-99,但我要899999999
}
}
我可以在服务文件中的
create
方法中这样做:
const clearPhone=phone.replace(/[^0-9]/gim')


但是我想让
phone
字段自动转换和验证。也许我可以在dTO文件中使用
@Transform
装饰器从
类转换
包中执行此操作?

您可能可以使用
@Transform()
实现此操作,如下所示:

从“类转换器”导入{Transform};
从“类验证器”导入{IsNotEmpty};
导出类注册表客户端到{
@IsNotEmpty()
@转换(value=>value.replace(/[^0-9]/gim,'))
只读电话:字符串;
}
并确保在验证管道选项中设置
transform:true

另一个选项是为电话号码创建一个自定义管道,这样做的目的是确保如果使用该路线,则只在有电话号码的对象上使用管道。

这是一个好地方