• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

nestjs에서 express의 Reqest객체를 사용할 때 req를 이용해서 미들웨어끼리 값을 공유할수 있는지 궁금합니다.

22.05.20 14:20 작성 조회수 235

2

  제가 express를 몇번 사용해보고 상석님 강의를 보게 되었는데 제가 진행하던 프로젝트에서 첫 번째 미들웨어에서 req에 값을 넣은 후 두 번째 미들웨어에서 그값을 다시 사용하였던적이 있었는데 nestjs에서는 그 방법이 효용될까요? 예를 들어 data라는 이름의 req 프로퍼티를 만들면 data라는 이름은 정의되어있지 않다고 해서요. 

req.data 'Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>' 형식에 'data' 속성이 없습니다.ts(2339)

답변 1

답변을 작성해보세요.

0

안녕하세요 답변이 늦었습니다. 

NestJS도 가능합니다! 다만 req 객체에 타이핑을 해주어야 가능합니다. 

src/typings 폴더를 만드시고 express.d.ts 파일을 만듭니다.

그 후에 

declare global {

    namespace Express {

         type Data = 정의하고싶은타입

         interface Request {

              data?: Data

         }

     }

}

이런식으로 타이핑을 해주면 타입에러가 나질 않습니다. 

이승훈님의 프로필

이승훈

질문자

2022.06.22

답변 감사드립니다! 시도 해봤는데 작동이 잘되네요. 그런데 이해가 안가는 부분이 있는데 interface Data extends Data {} 이 부분에서 Data 라는 클래스를 상속하는걸로 보이는데 Data의 근원은 어디서 온건가요? 그리고 declare와 namespace에 대해서 어떤기능을 하는지 알 수 있을까요?

예시로 해놓았습니다!! 조금 헷갈릴 여지가 있어서 수정했습니다. 정의하고 싶은 타입으로 선언하고 사용하시면 됩니다.

추가적으로 이건 NestJS이기 때문에 해야 하는 작업이 아닌 typescript이기 때문에 해야 하는 작업입니다! 타입 확장이라고 하죠. express 기반 프로젝트도 타입스크립트 기반이라면 이런식으로 필요할때 타입확장을 해주면 좋습니다.