프로그래밍 언어/NEXT.JS

[NEXT.JS] Axios

doomole 2024. 7. 31. 11:24
728x90

개요

Axios는 HTTP 클라이언트 라이브러리로, 브라우저와 Node.js 환경에서 모두 사용할 수 있는 도구입니다. 주로 비동기 HTTP 요청을 쉽게 관리하고 처리하는 데 사용됩니다.

 

 

특징

Promise 기반

Axios는 Promise API를 사용하여 비동기 요청을 처리합니다.

이를 통해 콜백 헬(callback hell)을 피하고, 비동기 코드를 더 읽기 쉽게 작성할 수 있습니다.

axios.get('/api/data')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error(error);
  });

 

인터셉터 (Interceptors)

요청(request) 또는 응답(response)이 처리되기 전에 특정 작업을 수행할 수 있도록 하는 인터셉터 기능을 제공합니다.

이를 통해 요청 전 인증 토큰을 추가하거나, 응답 에러를 공통으로 처리하는 등의 작업이 가능합니다.

// 요청 인터셉터
axios.interceptors.request.use(config => {
  // 요청 전에 작업 수행
  config.headers.Authorization = `Bearer ${token}`;
  return config;
}, error => {
  return Promise.reject(error);
});

// 응답 인터셉터
axios.interceptors.response.use(response => {
  // 응답 데이터 처리
  return response;
}, error => {
  // 응답 에러 처리
  return Promise.reject(error);
});

 

자동 JSON 데이터 변환

Axios는 JSON 데이터를 자동으로 변환하여 요청 본문에 추가하거나, 응답 데이터를 파싱합니다.

이는 서버와의 데이터 통신을 더 쉽게 만들어 줍니다.

axios.post('/api/data', {
  name: 'John Doe',
  age: 30
})
.then(response => {
  console.log(response.data);
})
.catch(error => {
  console.error(error);
});

 

취소 토큰 (Cancel Token)

Axios는 요청을 취소할 수 있는 기능을 제공합니다. 이는 사용자가 여러 번 요청을 보낼 때, 이전 요청을 취소하고 새로운 요청을 처리할 때 유용합니다.

const CancelToken = axios.CancelToken;
const source = CancelToken.source();

axios.get('/api/data', {
  cancelToken: source.token
})
.catch(thrown => {
  if (axios.isCancel(thrown)) {
    console.log('Request canceled', thrown.message);
  } else {
    // handle error
  }
});

// 요청 취소
source.cancel('Operation canceled by the user.');

 

타임아웃 설정 및 기본값 구성

Axios는 요청에 대한 타임아웃을 설정할 수 있으며, 기본적으로 적용될 설정값을 정의할 수 있습니다.

axios.defaults.baseURL = 'https://api.example.com';
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.timeout = 2500;

 

 

사용 예시

설치

npm install axios

 

사용

import React, { useEffect, useState } from 'react';
import axios from 'axios';

const FetchData = () => {
  const [data, setData] = useState([]);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);

  useEffect(() => {
    axios.get('https://jsonplaceholder.typicode.com/posts')
      .then(response => {
        setData(response.data);
        setLoading(false);
      })
      .catch(error => {
        setError(error);
        setLoading(false);
      });
  }, []);

  if (loading) return <p>Loading...</p>;
  if (error) return <p>Error: {error.message}</p>;

  return (
    <ul>
      {data.map(post => (
        <li key={post.id}>{post.title}</li>
      ))}
    </ul>
  );
};

export default FetchData;

 

 

문의사항이나 피드백은 댓글로 남겨주세요.

 

 

'프로그래밍 언어 > NEXT.JS' 카테고리의 다른 글

[NEXT.JS] Zustand  (0) 2024.07.31
[NEXT.JS] SWR  (0) 2024.07.31
[NEXT.JS] Express.js  (0) 2024.07.31
[NEXT.JS] 환경변수 설정  (0) 2024.07.11
[NEXT.JS] TypeScript(타입스크립트)  (0) 2024.07.11