NestJS объект ответа доступа в каналах - PullRequest
2 голосов
/ 17 июня 2019

Я использую каналы для проверки запроса. Если запрос не выполнен, я хочу перенаправить страницу, но не хочу выдавать ошибку. Проблема заключается в том, как получить доступ к объекту ответа при проверке.

Это мой проверочный канал.

@Injectable()
export class ValidationPipe implements PipeTransform<any> {
  async transform(value: any, { metatype }: ArgumentMetadata) {
    if (!metatype || !this.toValidate(metatype)) {
      return value;
    }
    const object = plainToClass(metatype, value);
    const errors = await validate(object);
    if (errors.length > 0) {
     // in here i need to response with res.redirect('') function
      throw new BadRequestException('Validation failed');
    }
    return value;
  }
  private toValidate(metatype: Function): boolean {
    const types: Function[] = [String, Boolean, Number, Array, Object];
    return !types.includes(metatype);
  }
}

Вместо выдачи исключения мне нужен доступ к функции res.redirect ()

1 Ответ

1 голос
/ 17 июня 2019

Объект response недоступен из контекста pipe. Что вы могли бы сделать, это A) использовать взамен interceptor или B) выдать исключение и использовать filter, чтобы перехватить это конкретное исключение и перенаправить в правильное местоположение.

Pipes используются только для проверки или преобразования объекта и, как таковые, немедленного возврата (с возможно преобразованным объектом) или выдачи ошибок о том, почему преобразование / проверка завершились неудачей.

...