匹配类验证器的装饰器无法正常工作

时间:2021-04-04 08:43:15

标签: typescript nestjs class-validator

我正在学习 nestjs 作为我的工作要求

这是我的正则表达式:/(?=[^\d].*)^[\w]{4,}$/ 这意味着第一个字符不能是数字,整个字符串至少有 4 个字符

这里是 DTO:

import { IsString, IsPhoneNumber, Matches } from 'class-validator';
export class CreateUserDto {
  @Matches(/(?=[^\d].*)^[\w]{4,}$/, {
    message:
      'the first character of the username must not be a number. Username must contains at least 4 characters',
  })
  username: string;

  @IsString()
  password: string;

  @IsPhoneNumber('VN')
  phoneNumber: string;
}

无论请求正文中的用户名是什么,它仍然通过,即使是空字符串 但是当我为用户名字段发布一个普通数字时,服务器响应了一个错误作为匹配装饰器的默认操作

{
    "statusCode": 400,
    "message": [
        "username must be a string"
    ],
    "error": "Bad Request"
}

我也在 main.ts 中启用了验证

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.enableCors();
  app.useGlobalPipes(new ValidationPipe());
  await app.listen(9000);
}
bootstrap();

谁能帮我解释一下?感谢您的帮助

1 个答案:

答案 0 :(得分:0)

奇怪的是,我通过删除 dist 文件夹解决了这个问题

也许 ts 转译器没有将最新的 ts 代码重新转译为 js 代码。我没有理由