인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

탄탄한 백엔드 NestJS, 기초부터 심화까지

passport와 인증 전략 & Custom decorator

error_code : Property 'user' does not exist on type 'Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>'.ts(2339)

작성

·

351

0

안녕하세요! 저와 같은 수강생 여러분, 반갑습니다.

분명 저와 같은 에러를 겪고 분투하는 사람을 위해서 제 경험을 공유 드립니다.

 

저 같은 경우 선생님 코드를 그대로 따라 진행을 했었는데요.

특히나 CustomDecoration 부분에 있어서 그대로 따라 진행을 했습니다.

 

정확히 이 부분에서 에러가 발생을 하더라구요.

return request.user as CatCurrentDto;

 

에러의 내용은 아래와 같습니다.

Property 'user' does not exist on type 'Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>'.ts(2339)

 

해결방안은 선생님이 보여주신 nestJS의 공식문서를 참고해서 다시 적어보았는데요. Request를 제거해주시면 저 부분이 잡힙니다.

버전이 자꾸 바뀌기때문에 매개변수, 메소드, 각각의 요구되는 필드값 또한 바뀌는것 같습니다.

 

무언가 잘 안될때는 제공해주신 공식문서 찾는것도 좋은 방법인거 같습니다.

저와 같은 에러를 만나신분에게 조금이나마 도움이 되었음좋겠습니다.

 

아래는 전체 로직 입니다.

 

[user.decorator.ts] -> 제공된 소스코드 수정한 코드

import { CatCurrentDto } from './../../cats/dto/cats.current.dto';
import { createParamDecorator, ExecutionContext } from '@nestjs/common';

export const CurrentUser = createParamDecorator(
  (data: unknown, ctx: ExecutionContext) => {
    const request = ctx.switchToHttp().getRequest();
    return request.user as CatCurrentDto;
  },
);

 

[user.decorator.ts] -> 제공된 소스코드

import { CatCurrentDto } from './../../cats/dto/cats.current.dto';
import { Request } from 'express';
import { Cat } from '../../cats/cats.schema';
import { createParamDecorator, ExecutionContext } from '@nestjs/common';

export const CurrentUser = createParamDecorator(
  (data: unknown, ctx: ExecutionContext) => {
    const request: Request = ctx.switchToHttp().getRequest();
    return request.user as CatCurrentDto;
  },
);

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

shuiiing님께서 겪고 계신 문제는 NestJS에서 Custom Decorator를 사용할 때 발생하는 타입 에러와 관련된 것으로 보입니다. 질문 내용과 유사한 상황에 대한 해결책이 이미 공유된 바 있습니다.

관련 질문:

  • CurrentUser관련 질문 드립니다에서는 @CurrentUser() 데코레이터의 타이핑과 관련된 질문에 답변을 제공하고 있습니다. 여기서 @CurrentUser() cat: Cat에서 Cat은 스키마에서 정의한 잡다한 값들이 들어가는 상태인데, JWT에서 coming catrequest.user에 삽입하는 과정에서 발생하는 타입 관련 문제를 다루고 있습니다.

이 질문에서 의심되는 부분은 Custom Decorator를 정의하고 사용하는 과정에서 TypeScript의 타입 시스템과 NestJS의 실행 컨텍스트 상에서 발생하는 타입 불일치 문제입니다. 제공된 답변에서는 타입을 명확히 정의하고, 필요에 따라 커스텀 DTO를 정의하는 방법을 추천하고 있습니다. 이 방법은 타입 안전성을 높이고 런타임 에러를 줄일 수 있습니다.

shuiing님의 경우, request.user의 존재 여부에 대한 명확한 타이핑이 필요해 보입니다. 답변에서 제시된 대로 Request 타입을 명시적으로 선언하지 않고, NestJS의 ExecutionContext를 통해 request 객체에 접근하는 방식으로 문제를 해결한 점을 확인할 수 있습니다.

shuiiing님도 지침을 따라 해결하신 것처럼, 공식 문서와 유사한 경우를 참고하시는 것은 문제를 해결하는 좋은 방법입니다. NestJS의 공식 문서 또는 해당 강의의 강의 노트에서 더 상세한 정보를 찾아 보실 수 있으며, API의 변경 사항 등을 확인하는 것도 유용합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기