Здравствуйте, я недавно новичок в NESTJS, и мне нужна помощь, чтобы решить эту проблему.проблема состоит в том, что мне нужно на канале проверки, чтобы иметь доступ к токену запроса для вызова antoher api (с тем же токеном) и использования HttpModule, чтобы проверить, был ли отправленный идентификатор действительным или нет.
Трубка валидации (пример из документации nestjs):
@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);
}
}
Пользовательский валидатор:
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 }})
},
},
});
};
}
Что предлагает, на DTO я помещаю декораторы для проверки, а затем он вызываетAPI автоматически проверяет, существует ли language_id или нет.
@ApiModelProperty()
@IsLanguageValid({}, { message: 'the language id sent is not valid'})
@IsNumber({}, { message: 'the id should be a number' })
language_id: number;