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

hi-ster님의 프로필 이미지
hi-ster

작성한 질문수

[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지

NodeBird API 호출하기

api status 질문드립니다

작성

·

176

0

cat 에서 

const tokenResult = await axios.post('http://localhost:8002/v1/token', {
        clientSecret: process.env.CLIENT_SECRET,
      });

일부로 없는 client_secret으로 응답했을때

const domain = await Domain.findOne({
      where: { clientSecret },
      include: {
        model: User,
        attribute: ['nick', 'id'],
      },
    });
   
    if (!domain) {
      return res.status(401).json({
        code: 401,
        message: '등록되지 않은 도메인입니다. 먼저 도메인을 등록하세요',
      });
  }

여기서 domian null값찍히고 res.status(401).json으로 응답 받구

POST /v1/token 401 38.669 ms - 100

찍히는거 확인했습니다.

GET /test 500 54.443 ms - 575

근데 여기서 500애러를 바로 떨궈버리는데 맞는건가요??

else { // 토큰 발급 실패
        return res.json(tokenResult.data); // 발급 실패 사유 응답
    }

여기가 언제걸리는지 궁금합니다.

그리고 cat에서 

router.get('/test', async (req, res, next) => { // 토큰 테스트 라우터
  try {
    if (!req.session.jwt) { // 세션에 토큰이 없으면 토큰 발급 시도
      const tokenResult = await axios.post('http://localhost:8002/v1/token', {
        clientSecret: process.env.CLIENT_SECRET,
      });
      if (tokenResult.data && tokenResult.data.code === 200) { // 토큰 발급 성공
        req.session.jwt = tokenResult.data.token; // 세션에 토큰 저장
      } else { // 토큰 발급 실패
        return res.json(tokenResult.data); // 발급 실패 사유 응답
      }
    }
    // 발급받은 토큰 테스트
    const result = await axios.get('http://localhost:8002/v1/test', {
      headers: { authorization: req.session.jwt },
    });
    return res.json(result.data);
  } catch (error) {
    console.error(error);
    if (error.response.status === 419) { // 토큰 만료 시
      return res.json(error.response.data);
    }
    return next(error);
  }
});

 

여기서 응답했을때 nodebirdapi에서

if(error.name == 'TokenExpiredError'){
        return res.status(419).json({
          code : 419,
          message:'토큰이 만료되었습니다.'
        });
      }
      return res.status(401).json({
        code : 401,
        message:'유효하지 않은 토큰입니다.'
    });

res.status.400번대인애들은

바로 catch에 걸리는건가요?

return res.json(tokenResult.data); // 발급 실패 사유 응답

그럼 얘는 의미없는거 아닌가하고 질문드립니다.

 

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

네 axios의 status가 400번대나 500번대면 catch로 갑니다. catch로 가면 따로 res.json하지 않는 이상 next(err)가 되어 500 에러가 돼서 GET /test가 500입니다.

res.json(tokenResult.data)는 의미가 없네요.

hi-ster님의 프로필 이미지
hi-ster

작성한 질문수

질문하기