Typescript Nest.js。其中转换(序列化)客户端';在服务中使用数据之前,先将其保存
我应该在哪里转换来自客户端的收入数据,以使用service.ts文件中的转换值 例如,我从客户端获取JSON数据,如下所示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.
{
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
另一个选项是为电话号码创建一个自定义管道,这样做的目的是确保如果使用该路线,则只在有电话号码的对象上使用管道。这是一个好地方