[Node.js] request에 값 전달하기

HR·2022년 7월 26일
0

request에 값을 전달해야하는 상황이다. 예를 들어 로그인을 한 유저가 유효한 유저인지 검사하는 미들웨어를 거친다고 치자. 유효하지 않은 유저라면 에러처리를 할 것이고, 유효한 유저라면 유저의 아이디를 request에 담아 다음 미들웨어로 보내고싶은 상황이다.

이전 프로젝트 때에는 JavaScript를 사용해서 별 문제가 없었으나, 이번에는 TypeScript를 사용하였더니 다음과 같은 에러가 발생했다.

req.currentUserId로 값을 넘기는 코드를 작성했다면,

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

라는 에러를 볼 수 있다.

문제를 해결하기 위해 검색해본 결과,
Github Issue
express와 Typescript 사용 중 req에 임의의 값 넣기
해당 문제에 대한 글을 확인해볼 수 있었다. JS와 달리 TS에서는 Request에 해당 속성이 없어서 오류를 내는 것이었다.

  1. src 폴더 안에 CustomType 폴더 만들기

    위의 이미지대로 하지 않고 customType에 express.d.ts파일을 생성해도 가능하다.

  2. tsconfig.json 파일 수정하기

"typeRoots": ["./src/customType", "./node_modules/@types"],

tsconfig.json파일을 열고 다음과 같이 입력한다. 단, 중요한 것은 순서이다. 나는 배열의 순서를 반대로 적어서 몇 시간동안 삽질을 했다...... 떠올리고 싶지 않은 순간😹

  1. index.d.ts 파일에 타입 적기
declare namespace Express {
  export interface Request {
    currentUserId: string;
    currentUserNickname: string;
  }
}

사용하고싶은 속성을 명시해주면 끝! 나는 유저의 아이디와 닉네임이 필요했기 때문에, 다음과 같이 작성했다. 이제 req.currentUserId를 사용할 수 있다.

profile
Hello World :D

0개의 댓글