nest中DTO常用class-validator 库在 TypeScript 中定义数据验证的装饰器

  1. @IsOptional(): 这个装饰器表示该属性是可选的,即验证时不会强制要求该属性存在。
  2. @IsDate(): 这个装饰器确保属性值是一个有效的日期。
  3. @IsEmail(): 这个装饰器确保属性值是一个有效的电子邮件地址。
  4. @IsString(): 这个装饰器确保属性值是一个字符串。
  5. @IsIn(['male', 'female']): 这个装饰器确保属性值是 'male' 或 'female' 中的一个。
  6. @IsPhoneNumber() 是一个装饰器,通常用于验证对象属性是否符合电话号码的格式
  7. @IsNotEmpty() 是一个装饰器,通常用于验证对象属性是否不为空。
  8. @IsNumberString() 是一个装饰器,通常用于验证对象属性是否为数字字符串

 @ApiProperty({

    description: '生年月日',  属性

    required: false,   不必要

  })

  @IsOptional()  不会强制要求该属性存在

  @IsDate()   有效的日期

  birthday?: Date;

首先需要在NestJS项目安装node-snap7,可以使用以下命令: ``` npm install node-snap7 ``` 然后在需要使用PLC读写的服务引入该: ```typescript import { Injectable } from '@nestjs/common'; import * as snap7 from 'node-snap7'; @Injectable() export class PlcService { private client: snap7.S7Client; constructor() { this.client = new snap7.S7Client(); } async connect(ipAddress: string, rack: number, slot: number): Promise<void> { return new Promise<void>((resolve, reject) => { this.client.connect( ipAddress, rack, slot, (err) => { if (err) { reject(err); } else { resolve(); } }, ); }); } async readBytes(dbNumber: number, start: number, length: number): Promise<Buffer> { return new Promise<Buffer>((resolve, reject) => { const buffer = Buffer.alloc(length); this.client.readArea( snap7.S7AreaDB, dbNumber, start, length, snap7.S7Word, (err, data) => { if (err) { reject(err); } else { resolve(data); } }, ); }); } async writeBytes(dbNumber: number, start: number, buffer: Buffer): Promise<void> { return new Promise<void>((resolve, reject) => { this.client.writeArea( snap7.S7AreaDB, dbNumber, start, buffer.length, snap7.S7Word, buffer, (err) => { if (err) { reject(err); } else { resolve(); } }, ); }); } } ``` 在上述代码,我们定义了一个PlcService服务,该服务包含了连接PLC、读取PLC地址块和写入PLC地址块等方法。在connect方法,我们使用node-snap7的S7Client类连接PLC。在readBytes方法,我们使用readArea方法读取PLC地址块的数据。在writeBytes方法,我们使用writeArea方法向PLC地址块写入数据。 在使用该服务时,需要先调用connect方法连接PLC,连接成功后即可使用readBytes和writeBytes方法读取和写入PLC地址块的数据。 ```typescript import { Controller, Get, Post, Body } from '@nestjs/common'; import { PlcService } from './plc.service'; @Controller('plc') export class PlcController { constructor(private readonly plcService: PlcService) {} @Post('connect') async connect(@Body() body: { ipAddress: string; rack: number; slot: number }): Promise<void> { await this.plcService.connect(body.ipAddress, body.rack, body.slot); } @Get('read') async read(): Promise<Buffer> { return this.plcService.readBytes(1, 0, 10); } @Post('write') async write(@Body() body: { data: string }): Promise<void> { const buffer = Buffer.from(body.data, 'hex'); await this.plcService.writeBytes(1, 0, buffer); } } ``` 在上述代码,我们定义了一个PlcController控制器,该控制器包含了连接PLC、读取PLC地址块和写入PLC地址块等接口。在connect接口,我们接收客户端传递过来的PLC的IP地址、机架号和插槽号,然后调用plcService的connect方法连接PLC。在read接口,我们调用readBytes方法读取PLC地址块的数据,并将数据返回给客户端。在write接口,我们接收客户端传递过来的数据,然后将数据转换为Buffer类型,并调用writeBytes方法向PLC地址块写入数据。 需要注意的是,以上代码仅是示例代码,实际应用需要根据具体的PLC型号和地址块设置调用相应的读写方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值