gpt4 book ai didi

typescript - api 数据验证的最佳实践

转载 作者:行者123 更新时间:2023-12-04 08:50:46 25 4
gpt4 key购买 nike

我正在创建 apinestjs ,但是当涉及到数据验证时,由于存在许多选项,它变得如此困惑,
例如,我应该使用模式验证来验证路由级别的数据(如 hapi@joi )
或在类级类验证器中验证数据
`

use(req: Request, res: Response, next: Function) {
console.log('the method is', req.method);

const userSchema = joi.object({
name: joi
.string()
.alphanum()
.min(3)
.max(15)
.required(),
phone: joi
.number()
.min(11)
.required(),
password: joi
.string()
.min(8)
.max(100)
.required()
.regex(/((?=.*\d)|(?=.*\w+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/),
});
const { error } = userSchema.validate(req.body);
if (error) {
throw new BadRequestException(error.details);
}
next();
`
类级别的验证
`
export class CreateUserDto {
@IsString()
@IsNotEmpty()
name: string;

@IsNotEmpty()
@IsString()
@Matches(/((?=.*\d)|(?=.*\w+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/)
password: string;

@IsNumber()
@Length(11, 15)
@IsNotEmpty()
phone: number;
}
`

最佳答案

这是个人喜好,很大程度上取决于您的项目结构,但是...
使用 DTO 来验证您的对象使您的代码更简洁恕我直言,并简化了 nest OpenAPI plugin (used for documentation) 的使用.而且,因为如果我们删除装饰器,它只不过是一个带有属性的简单类,您也可以将它用作函数参数的类型,就像 -> https://docs.nestjs.com/openapi/types-and-parameters允许 typescript 推断对象的类型并允许您确保它已经过验证

关于typescript - api 数据验证的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64107465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com