NestJS 验证 mongo objectid 的@param 格式

NestJS validate @param format of mongo objectid

我正在使用 mongodb 作为我的数据库使用 nestjs 框架创建一个应用程序。在我的 CRUD findOne 方法中,我想验证发送的 ID 是 Mongo ObjectID 和 return 400 如果不是(默认情况下它 returns 500 如果你让它流过)。我可以手动检查这是,但是有没有办法注释参数以自动进行此验证?

  @Get(':id')
  findOne(@Param('id') id: string) {
    return this.usersService.findOne(id);
  }

您可以使用 class 验证器和转换,如下所示:

控制器:

@Get(':id')
findOne(@Param() params: OnlyIDParamDTO) {
  return this.usersService.findOne(params.id);
}

DTO:

export class OnlyIDParamDTO {
  @ApiProperty({
    description: 'Id',
    required: true,
    type: String,
    default: '61d9cfbf17ed7311c4b3e485',
  })
  @IsMongoId()
  @IsString()
  @Transform((value) => SafeMongoIdTransform(value))
  id: string;
}

变换:

export const SafeMongoIdTransform = ({ value }) => {
  try {
    if (
      Types.ObjectId.isValid(value) &&
      new Types.ObjectId(value).toString() === value
    ) {
      return value;
    }
    throw new BadRequestException('Id validation fail');
  } catch (error) {
    throw new BadRequestException('Id validation fail');
  }
};

您可以在这里阅读更多内容:https://docs.nestjs.com/pipes#object-schema-validation