IT/Nuxt & vue

[Nuxt] Axios interceptors 사용하기

2023. 3. 10. 12:20
오늘의 명언

“ 에러 없는 프로그램을 만드는 데는 두가지 방법이 있다. 그런데 세번째 것만 작동한다. ”

- Alan J. Perlis (앨런 J. 펄리스)
목차
  1. Axios Interceptors 란?
  2. Request Interceptors?
  3. Response Interceptors?
  4. 환경구성
  5. Nuxt Plugins 폴더에 axios.client 파일 생성
  6. 모듈 설정 (nuxt.config.js)
  7. Axios 사용
  8. Typescript Axios Type 정리
300x250

Nuxt2로 프로젝트를 진행하면서 백엔드 서버와의 통신할 때 제가

Axios Interceptors 설정과 처리하는 방식을 한번 작성해보려고 합니다.


 

Axios Interceptors 란?

request와 response가 then 또는 catch로 처리되기 전에 가로챌 수 있게 해주는 axios 라이브러리입니다.

정리하면 Http Request , Response가 then catch 처리되기 전에 부가적인 처리 작업을 할 수 있습니다.

 

 

Request Interceptors?

  • config 옵션 설정
  • headers 설정
  • jwt 인증이나 관련 부분 처리 -> 헤더에 담아서 보낼 때 
  • 로딩 관련
  • 로그 작업

Response Interceptors?

  • 에러 핸들링 -> statusCode 별로 에러 처리나, 에러 페이지로 이동 설정
  • 서버에서 받은 데이터 처리 -> 보통 데이터 그대로 return 하는 편
  • 로딩 관련
  • 로그 작업

환경구성

이름 버전
Nuxt 2.15.8
@nuxtjs/axios 5.13.6
axios 0.27.2
cookie-universal-nuxt 2.2.2

 

Tip

cookie-universal-nuxt 모듈은 쿠키 관련 설정할 때 나름 편해서 사용하고 있습니다.

 

cookie-universal-nuxt

Universal cookie plugin for Nuxt, perfect for SSR. Latest version: 2.2.2, last published: 7 months ago. Start using cookie-universal-nuxt in your project by running `npm i cookie-universal-nuxt`. There are 55 other projects in the npm registry using cookie

www.npmjs.com

 


Nuxt Plugins 폴더에 axios.client 파일 생성

 

plugins

  • 코드에서 헤더 설정과, $cookies 사용, 재요청, 에러페이지 이동 등 참고하시면 됩니다.

    
import axios from 'axios'
export default function ({app,$cookies})
{
axios.interceptors.request.use((config)=>{
// 헤더 설정
config.headers['Content-Type'] = 'application/json';
// 토큰 가져오기 $cookies 사용 -> nuxt.config에서 설정방법 참고
let token ={
accessToken: $cookies.get('accessToken'),
refreshToken : $cookies.get('refreshToken')
}
// headers 명은 서버가 정해줌
config.headers['AUTH-TOKEN'] = `${token.accessToken}`;
return config
},
(error)=>{
// 요청시 에러날때 에러 리턴
// 에러관련 처리가 필요하면 여기다 작성
return Promise.reject(error)
})
axios.interceptors.response.use((response)=>{
// 서버에서 받은 데이터 리턴
return response
},
async (error)=>{
// 리스폰 에러날때 관련 처리
const { config, response: { status,data }, } = error;
// 예시: 404일때 재요청
if(status === 404){
return axios(config)
}
// 예시: 403일때 에러페이지로(layout/error) 이동
else if(status === 403)
{
$nuxt.error({statusCode:403})
}
// 에러 리턴
return Promise.reject(error)
})
}

 

 

모듈 설정 (nuxt.config.js)


    
// nuxt.config.js
...
modules: [
'@nuxtjs/axios',
[
'cookie-universal-nuxt',
{
alias: 'cookies',
SameSite: 'Strict'
}
]
],

 

 

Axios 사용

  • 제가 사용하는 방식은 service/index.js 에서 get, post, put, delete 관련 메소드 설정을 하고
  • service/api/test.js 파일에서 사용합니다. 물론 사람마다 스타일이 다르기 때문에 참고용으로 봐주시면 됩니다.
  • axios interceptors 설정한 부분에 콘솔로 요청 전 요청 후 확인하시면 됩니다.

    
// service/index.js 로 구성
import axios from "axios";
export const getData = (path,params)=>{
return new Promise((resolve,reject)=>{
axios.get(`/test${path}`,{params})
.then((data)=>{
if(data.status === 200){
resolve(data)
}
})
.catch((error)=>{
console.log(error)
reject(error)
})
})
}
// multipart용 post
export const postImage = (path,params)=>{
return new Promise((resolve,reject)=>{
axios.post(`/api${path}`,params,{
headers: {
'Content-Type' : 'multipart/form-data'
}
})
.then((data)=>{
if(data.status === 200){
resolve(data)
}
})
.catch((error)=>{
reject(error)
})
})
}

 


    
//service/api/test.js
import {getData,postImage} from '@/service'
// Get
export function SelectTest(params)
{
return new Promise( (resolve,reject)=>{
getData(`/test/${params}`)
.then((data)=>{
resolve(data)
})
.catch((error)=>{
reject(error)
})
})
}
// image insert
export function InsertImage(params){
return new Promise((resolve, reject) =>{
postImage(`/image`,params)
.then((data)=>{
resolve(data)
})
.catch((error)=>{
reject(error)
})
})
}

 

 

Typescript Axios Type 정리

  • 사용할 Axios 관련 타입을 정의하여 사용합니다.
  • axios typescript 설정은 추후에 다른 포스팅으로 설명하겠습니다.

    
import {
AxiosInstance,
AxiosInterceptorManager,
AxiosRequestConfig,
AxiosResponse
} from 'axios'
type CustomAxiosResponse<T = any> = {
response?: T
refreshToken?: string
}
export interface CustomAxiosInterface extends AxiosInstance {
interceptors: {
request: AxiosInterceptorManager<AxiosRequestConfig>
response: AxiosInterceptorManager<AxiosResponse<CustomAxiosResponse>>
}
get<T>(url: string, config?: AxiosRequestConfig): Promise<T>
delete<T>(url: string, config?: AxiosRequestConfig): Promise<T>
post<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T>
put<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T>
patch<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T>
}

 

 


Nuxt2 환경에서 Axios interceptors 관련 설정과 사용법에 대해서 설명해 보았습니다.

제가 사용하는 방식을 정리한 것이기 때문에 참고용으로 봐주시면 감사하겠습니다.

그리고 위에서도 작성했지만

Typescript로 작업은 추후에 정리 한번 해서 포스팅해보도록 하겠습니다.

 

 

 [TypeScript] Axios TypeScript 적용하여 사용해보자

 

느린 개발자

프론트엔드 백엔드 학습정리 및 정보공유 블로그입니다.

stack94.tistory.com

 

반응형
저작자표시 비영리 변경금지 (새창열림)
잘못된 내용이 있으면 댓글 부탁드립니다. 감사합니다.
Stack_Shines
Stack_Shines
프론트엔드 백엔드 학습정리 및 정보공유 블로그입니다.
'IT/Nuxt & vue' 카테고리의 다른 글
  • [Nuxt] 구글 시트에서 적용한 다국어( i18n) vee-validate 사용하기
  • [Nuxt] Vuetify 설치 방법 및 Material icon 설정
  • [Nuxt] Axios 와 Proxy 사용 방법 (CORS)
  • [Nuxt] 구글시트(google sheet)를 이용한 다국어(i18n) 자동화 처리
Stack_Shines
느린 개발자
Stack_Shines
전체
오늘
어제
  • 분류 전체보기 102
    • 티스토리 10
    • IT 67
      • Library 3
      • JavaScript 3
      • TypeScript 3
      • Nuxt & vue 14
      • Nuxt3 6
      • React 4
      • NestJS 4
      • Express 9
      • CI CD 1
      • WebGl 4
      • docker 6
      • MAC 2
      • 디자인패턴 1
      • Error 4
      • 홈서버 3
    • 프로젝트 1
    • 오늘의 회고 2
    • 맛리뷰 7
    • 다이어트 5
    • 여행 1
    • 끄적끄적 일상 6
    • 생활 정보 3

인기 글

최근 글

hELLO · Designed By 정상우.
Stack_Shines
[Nuxt] Axios interceptors 사용하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.