ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [nodejs] middleware 에 대하여
    기타 2021. 5. 4. 20:15
    반응형

    노드 js 공부하면서 미들웨어라는 걸 배웠었지 그 때 당시에 그냥 말그대로 미들웨어 중간에 뭐해주는 역할을 정해줄수 있다 라는 내용 이었는데 

     

    사실 딱히 써본적이 없어서 기억속 어딘가에 있었던 개념이었다.

     

    유튜브보다가 코드보니까 훨씬 이해가 잘되서 적어본다.

     

    위사진의 맨 아래 라우터를 보면  경로(/infor) , auth , userCtrl.getUser 가 순차적으로 인자로 들어온 것을 확인 할수 있다.

     

    여기서 userCtrl 는 mvc 모델에서 controller 를 의미하고 위에 파일을 불러온 것을 확인 하면 짐작할수있다.

    위에 4개는 가운데 auth 미들웨어가 없는 상황인데 어떻한 점이 다른지 살펴보자~

     

    일단 위에꺼 중에서 로그인에 사용되는 userCtrl.login 함수를 살펴보자

    login: async (req, res) => {
        try {
          const { email, password } = req.body;
    
          const user = await Users.findOne({ email });
          if (!user) return res.status(400).json({ msg: "User does not Exist" });
    
          const isMatch = await bcrypt.compare(password, user.password);
          if (!isMatch) return res.status(400).json({ msg: "Incorrect password" });
    
          const accessToken = createAccessToken({ id: user.id });
          const refreshToken = createRefreshToken({ id: user.id });
    
          res.cookie("refreshtoken", refreshToken, {
            httpOnly: true,
            path: "/user/refresh_token",
          });
          res.json({ accessToken });
        } catch (err) {
          return res.status(500).json({ msg: err.message });
        }
      },

    특이한건 없다 그냥 바디에서 가져와서 값을 조회하고 토큰을 발급하고 리프레쉬토큰은 쿠키로 전해주고 응답으로는 엑세스 토큰을 보내주는 내용이다.

    그렇다면 이번에는 미들웨어가 사용된 userCtrl.getUser 함수를 살펴보자

    getUser: async (req, res) => {
        try {
          res.json(req.user);
        } catch (err) {
          return res.status(500).json({ msg: err.message });
        }
      },

    특이한건 있다 req 에 user 라는 것을 제이슨 형식으로 응답해주는 것을 볼수있다.

    본래는 저런 건 없다. 어떻게 있은걸가?

    이번에는 미들 웨어 auth 함수를 살펴보자

     

    일단 인자로 req,res,next 가 들어 있는걸 확인할수있는데 이걸보고 아 미들웨어 자리에 쓰이는 함수의 인자에는 저렇게 배치가 되는구나 라는것을 알수 있고 이건 약속이다 .

    보면 일단 req 의 헤더를 확인 한다. 그리고 Authorization 에 담긴 value 값을 token 으로 하고 유무에 따라 처리 해주는 것을 확인할수있다.

     

    이후에는 그 토큰을 복호화 한다음에 그 결과값을 user 라는 인자에 담고 req 에 심어주는 (?) 상황을 볼수 있다

    이후에 next() 라는 함수가 실행되면서 auth 함수는 끝이난다.

    여기서 next() 함수의 역할은

      "현재의 미들웨어 함수가 요청-응답 주기를 종료하지 않는 경우에는 next()를 호출하여 그 다음 미들웨어 함수에 제어를 전달해야 합니다. 그렇지 않으면 해당 요청은 정지된 채로 방치됩니다." 

    라고 하네요~

     

    위 그림과 같이 미들웨어는 하나만 들어올수 있는 것이 아니라 여러개 들어올수 있고 next 라는 함수에 의하여 다음 함수로 넘어가는 동작을 하게 된다.

     

    공통적으로 쓰이는 미들웨어는 각 요청마다가 아니라

    use 메서드를 통해서 사용할수도 있다.

     

    Express 미들웨어 사용

    미들웨어 사용 Express는 자체적인 최소한의 기능을 갖춘 라우팅 및 미들웨어 웹 프레임워크이며, Express 애플리케이션은 기본적으로 일련의 미들웨어 함수 호출입니다. 미들웨어 함수는 요청 오

    expressjs.com

     

    '기타' 카테고리의 다른 글

    [code & css] noteapp  (0) 2021.05.10
    [코테] 조합과 순열  (0) 2021.05.06
    [네트워크] https 에 대하여  (0) 2021.04.20
    로그인 (쿠키, 세션 ,토큰) 에 대해서  (2) 2021.04.19
    [vscode]연습장  (0) 2021.04.09
Designed by Tistory.