DI在流畅验证器中的应用。流畅验证器是一个轻量级、可扩展的验证库,可以将规则串联起来以验证数据。使用DI可以增加流畅验证器的灵活性和可扩展性。
使用DI需要首先安装依赖包:
npm install reflect-metadata@0.1.13
npm install @abraham/reflection
npm install @types/node
npm install @types/express
npm install inversify inversify-binding-decorators
然后通过创建一个容器来注入验证规则:
import 'reflect-metadata';
import { Container } from 'inversify';
import { fluentProvide } from 'inversify-binding-decorators';
import { ValidationRules } from 'fluentvalidation-ts';
// 创建容器
const container = new Container();
// 定义验证规则
@fluentProvide('password-validator')
class PasswordValidator implements ValidationRules<string> {
forTargetType(): this {
return this;
}
validate(context: {value: string}): string | Promise<string | undefined> | undefined {
if (!context.value.match(/^(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z]).{8,}$/)) {
return '密码需要包含一个数字、一个大写字母和一个小写字母,长度至少为8位';
}
}
}
// 将验证规则注入到容器中
container.bind<ValidationRules<string>>('password-validator').to(PasswordValidator).inSingletonScope();
// 使用验证规则
const password = 'Password123';
const validator = container.getNamed<ValidationRules<string>>('password-validator');
const result = validator.forTargetType().validate({value: password});
console.log(result); // undefined,通过验证