У меня есть приложение NestJS, которое использует паспорт, и я хотел бы добавить @User
параметр-декоратор для упрощения получения пользователем запроса, аналогично в этом примере .
Однако у меня также есть канал глобальной проверки, который я применяю для всех входящих запросов (тела, заголовки, строка запроса) и применяю другую проверку в зависимости от объявленного типа тела / запроса / заголовка. По какой-то причине при использовании функции createParamDecorator()
NestJS применяет валидатор к объекту req.user. Это неправильно, однако. Пользователь паспорта не является частью содержимого запроса, поэтому его не следует проверять таким образом.
Если не считать копии и вставки источника createParamDecorator()
и удаления строки, применяющей каналы, есть лиспособ отключить каналы или, по крайней мере, заставить мой канал проверки игнорировать типы, не связанные с запросом?
Мой канал проверки, для справки:
import { ArgumentMetadata, BadRequestException, Injectable, PipeTransform } from '@nestjs/common';
import { ValidationService } from './validation.service';
@Injectable()
export class ValidationPipe<T extends unknown> implements PipeTransform {
public constructor(private readonly service: ValidationService) {}
public async transform(value: T, metadata: ArgumentMetadata): Promise<T> {
const className: string | undefined = metadata.metatype && metadata.metatype.name;
if (className) {
const errors = await this.service.validate(value, className);
if (errors && errors.length > 0) {
throw new BadRequestException(errors);
}
}
return value;
}
}
Единственное, чего я не хочузаключается в изменении вышеуказанного (или службы) на типы черного / белого списков, так как они будут быстро меняться по мере развития приложения, поэтому было бы очень трудно добавить их в такие списки.