kakasoo

You provided an invalid object where a stream was expected. 본문

프로그래밍/NestJS

You provided an invalid object where a stream was expected.

카카수(kakasoo) 2023. 2. 24. 00:57
반응형
import { Injectable, NestInterceptor, ExecutionContext, CallHandler, RequestTimeoutException } from '@nestjs/common';
import { Observable, throwError, TimeoutError } from 'rxjs';
import { catchError, timeout } from 'rxjs/operators';

@Injectable()
export class TimeoutInterceptor implements NestInterceptor {
  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
    return next.handle().pipe(
      timeout(5000),
      catchError((err) => {
        if (err instanceof TimeoutError) {
          return throwError(() => new RequestTimeoutException());
        }
        return throwError(() => err);
      }),
    );
  }
}

RxJS와 Nest 에러로 생각하여 한 참을 헤맸다.
throw 3, throw Error(), throw BadRequestException(), 어떤 걸 던져도 에러가 나는 시점에 눈치챈 것은, 이게 interceptor에서 발생했을 거란 점이다.
그래서 appModule의 providers를 보고 하나씩 지워가면서 테스트해보니 timeoutInterceptor가 있고 없고가 문제였다.
에러는 여기 있었다.

return throwError(parameter); 의 형태에서 throwError를 지워버려서 발생한 에러였다.
위 코드는 정상적으로 동작하는 예시다.

반응형