개발자

axios 여러개일때 interceptor 질문드립니다.

1월 2일조회 334

axios 인스턴스를 만들어 interceptor의 response에서 로직을 처리하려고 합니다. JWT가 만료되었다는 응답을 가로채서 alert를 띄우고 로그인 화면에 이동을 시켰습니다. 그런데 한 화면에 JWT를 사용한 axios요청이 여러개이면 alert가 여러번 뜨게 됩니다. 가로채서 처리하더라도 요청 자체가 여러개이기 때문인데요, alert를 한번만 띄우게 하는 방법이 있을까요~?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 2

인기 답변

백승훈님의 프로필 사진

프론트엔드 적인 답변으로는 만약 만료가 된다면 alert를 띄우기 보단 저장된 JWT를 삭제한 후 페이지를 로그인 페이지 (혹은 메인 페이지)로 리다이랙션 하는것이 자연스러울 것 같습니다. 이 때 시각적인 효과를 주신다면 리다이랙션 후 해당 페이지에서 JWT의 삭제나 모달 등을 띄우는 방식으로 작성하시면 될 것 같습니다. 말씀주신 alert가 여러번 뜨는 것을 막는 방법은 window.alert로 재정의하여 로직을 추가하던지 등 여러가지 방법이 있을 것 같지만 그닥 추천되는 방법은 아닙니다 다음 방법과 같이 Flag를 추가하던지 setTimeout으로 일정 시간동안 한번만 발생하게 할 수 있습니다 (자세한 방식은 이벤트를 다루는 디바운스와 쓰로틀링 쪽을 한번 검색해보시면 됩니다.)

1
2
3
4
5
6
7
8
9
10
let isAlertShown = false;

window.alert = function(message) {
  if (!isAlertShown) {
    originalAlert(message);  // 원래의 alert 함수를 호출합니다.
    isAlertShown = true;      // 플래그를 true로 설정합니다.
  }
};

const originalAlert = window.alert; // 원래의 alert 함수를 저장합니다.
김선진님의 프로필 사진

김선진

작성자

소프트웨어 엔지니어1월 3일

코드 첨부까지.. 친절하고 자세한 설명 감사합니다.

프레드윰님의 프로필 사진

https://velog.io/@ek615/axios-interceptors-%EC%A0%95%EB%A6%AC 이거 도움 되실지 모르겠지만 참고 링크 남겨봐요

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!