Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

사고쳤어요

[Node.js] try-catch로 JWT 에러 예외 처리하기 본문

웹 풀스택

[Node.js] try-catch로 JWT 에러 예외 처리하기

kevinmj12 2025. 3. 24. 23:35
const token = jwt.sign(
    {
      id: loginUser.id,
      email: loginUser.email,
    },
    process.env.PRIVATE_KEY,
    {
      expiresIn: "5m",
      issuer: "minje",
    }
);

다음과 같이 유효기간을 5분으로 설정하고 토큰을 발급하였다.

그리고 토큰 발급 5분이 지난 뒤 요청을 하는 경우 에러가 발생하는 것을 볼 수 있다.

이렇게 jwt가 만료되는 경우 에러가 발생하므로 예외 처리를 진행해주어야 한다. (TokenExpiredError)

또한 jwt가 잘못 입력된 경우에도 에러가 발생하므로 예외 처리를 진행해주어야 한다. (JsonWebTokenError)

 

function decodeJWT(req) {
  try {
    const token = req.headers.authorization;
    const decodedToken = jwt.verify(token, process.env.PRIVATE_KEY);

    return decodedToken;
  } catch (err) {
    return err;
  }
}

const addLike = (req, res) => {
  const { likedBookId } = req.body;
  const token = decodeJWT(req);
  if (token instanceof jwt.TokenExpiredError) {
    return res.status(StatusCodes.UNAUTHORIZED).json({
      message: "로그인 세션이 만료되었습니다. 로그인이 필요합니다.",
    });
  } else if (token instanceof jwt.JsonWebTokenError) {
    return res.status(StatusCodes.UNAUTHORIZED).json({
      message: "잘못된 토큰입니다.",
    });
  }
}

 

try-catch를 사용해서 decodeJWT() 함수에서 에러가 발생하는 경우 에러를 리턴해주었다.

그리고 decodeJWT()를 사용하는 API에서 에러가 리턴된 경우 그 instance가 무엇인지를 파악하여 예외 처리를 진행해주었다.