类型转换器与验证器:class-transformer-validator 指南

类型转换器与验证器:class-transformer-validator 指南

class-transformer-validatorA simple plugin for class-transformer and class-validator which combines them in a nice and programmer-friendly API.项目地址:https://gitcode.com/gh_mirrors/cl/class-transformer-validator

项目介绍

class-transformer-validator 是一个结合了 class-validatorclass-transformer 功能的库,专为 TypeScript 设计。它简化了对象模型到简单JSON结构的转换以及反过来的过程,同时提供了强大的数据验证功能。这个工具是开发复杂后端服务或具备严格数据要求的应用程序时的理想选择,确保数据在进入数据库或从API传输时遵循预定义的规则。

项目快速启动

安装

首先,通过npm或yarn安装必要的库:

npm install class-validator class-transformer class-transformer-validator --save

示例代码

接下来,创建一个简单的类并使用注解进行验证和转换:

import { IsString, MinLength } from 'class-validator';
import { plainToClass, Transform } from 'class-transformer';
import { validate } from 'class-validator';
import { transformAndValidate } from 'class-transformer-validator';

class User {
    @IsString()
    @MinLength(4)
    name: string;

    @Transform(value => value.toUpperCase())
   姓: string;
}

async function quickStart() {
    const userPlain = { name: 'John', 姓: 'Doe' };
    try {
        const validatedUser = await transformAndValidate(User, [userPlain]);
        console.log(validatedUser);
    } catch (err) {
        console.error(err);
    }
}

quickStart();

这段代码展示了如何定义一个带有验证规则的类,并利用 transformAndValidate 函数验证并转换普通对象到类实例。

应用案例和最佳实践

数据验证与清洗

在处理HTTP请求时,可以将接收到的表单数据或者JSON体直接通过该库进行验证和清洗,避免不合法的数据污染业务逻辑:

app.post('/users', async (req, res) => {
    try {
        const newUser = await transformAndValidate(User, req.body);
        // 然后安全地保存或处理newUser对象
        res.status(201).json(newUser);
    } catch (validationError) {
        // 处理并返回错误信息
        res.status(400).json(validationError);
    }
});

自定义验证约束

除了内置的验证规则,还可以创建自定义验证器来满足特定业务需求:

import { ValidatorConstraint, ValidatorConstraintInterface, ValidationArguments } from 'class-validator';

@ValidatorConstraint({ name: 'isCustomValid', async: false })
export class IsCustomValid implements ValidatorConstraintInterface {
    validate(value: any, args: ValidationArguments) {
        // 自定义验证逻辑
        return value === 'custom-valid';
    }

    defaultMessage(args: ValidationArguments) {
        return `${args.value} 不符合自定义有效性规则。`;
    }
}

然后,在类属性上使用此约束:

class CustomEntity {
    @IsCustomValid()
    customField: string;
}

典型生态项目

虽然class-transformer-validator本身专注于其核心功能,但在实际开发中,它常与其他生态系统中的库一起使用,比如Express.js或Nest.js这样的Node.js框架,用于构建RESTful API。这些框架的支持使得在接收前端数据或外部接口数据时,能够迅速且严格地执行数据验证和转换,保证后端数据的一致性和安全性。

结合 Nest.js 的示例,则可以在控制器方法参数上直接使用装饰器来自动处理请求体的验证和转换,保持代码干净、优雅。


通过上述指南,开发者应能快速上手 class-transformer-validator,在他们的TypeScript项目中实现高效且可靠的模型转换及验证机制。

class-transformer-validatorA simple plugin for class-transformer and class-validator which combines them in a nice and programmer-friendly API.项目地址:https://gitcode.com/gh_mirrors/cl/class-transformer-validator

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董向越

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值