Zoeken op website

typescript - NESTJS Validatie Pipe en CustomValidatorDecorator met servicelaag


Hallo, ik ben onlangs nieuw op NESTJS en ik heb hulp nodig om dit probleem op te lossen. Het probleem bestaat uit het feit dat ik in de validatiepipe toegang moet hebben tot het token van het verzoek om een andere API aan te roepen (met hetzelfde token) en het HttpModule te gebruiken om te controleren of het verzonden id geldig was of niet.

Validatie-Pijp (Voorbeeld uit nestjs-documentatie):

@Injectable()
export class ValidationPipe implements PipeTransform<any> {
  async transform(value, { metatype }: ArgumentMetadata) {
    if (!metatype || !this.toValidate(metatype)) {
      return value;
    }
    const object = plainToClass(metatype, value);
    const errors = await validate(object);
    if (errors.length > 0) {
      throw new BadRequestException('Validation failed');
    }
    return value;
  }

  private toValidate(metatype): boolean {
    const types = [String, Boolean, Number, Array, Object];
    return !types.find((type) => metatype === type);
  }
}

Aangepaste validator :

import { registerDecorator, ValidationOptions, ValidationArguments } from 'class-validator';

export function IsLanguageValid(property: string, validationOptions?: ValidationOptions) {
  return function(object: Object, propertyName: string) {
    registerDecorator({
      name: 'isLanguageValid',
      target: object.constructor,
      propertyName: propertyName,
      constraints: [property],
      options: validationOptions,
      validator: {
        validate(value: any, args: ValidationArguments) {
          const [relatedPropertyName] = args.constraints;
          const relatedValue = (args.object as any)[relatedPropertyName];

          // WHERE HOW CAN I ACCESS TO A SERVICE AND TOKEN OF THE REQUEST
          this.httpModule.get('url to other api', { headers: { authrorization : TOKEN }})
        },
      },
    });
  };
}

Wat is het doel daarvan, op de DTO zet ik de decorateurs voor validatie en dan roept hij automatisch de API aan om te controleren of de language_id bestaat of niet.

  @ApiModelProperty()
  @IsLanguageValid({}, { message: 'the language id sent is not valid'})
  @IsNumber({}, { message: 'the id should be a number' })
  language_id: number;