[Vue] axios 사용하기

2024. 5. 27. 23:33·Vue.js
728x90

axios는 HTTP 요청을 보내기 위한 라이브러리로, Vue에서 비동기 통신을 쉽게 처리할 수 있다.

 

axios API

  • axios.get('url').then().catch(): 해당 url 주소에 대해 HTTP GET 요청을 보낸다. 서버에서 보낸 데이터를 정상적으로 받아오면 then() 안에 정의한 로직이 실행되고, 데이터를 밥아올 때 오류가 발생하면 catch()에 정의한 로직이 수행된다.
  • axios.post('url').then().catch(): 해당 url 주소에 대해 HTTP POST 요청을 보낸다. then()고 catch()의 동작은 위와 같다.
  • axios{( 옵션 속성 )}: HTTP 요청에 대한 자세한 속성들을 직접 정의하여 보낼 수 있다. 데이터 요청을 보낼 URL, HTTP 요청 방식, 보내는 데이터 유형 등

 

설치

npm install axios

 

사용 예

main.js

axios를 전역으로 설정할 수 있다.

import { createApp } from 'vue'
import App from './App.vue'
import axios from 'axios'

const app = createApp(App)

app.config.globalProperties.$axios = axios

app.mount('#app')

 

728x90

App.vue

<template>
  <h1>Axios Example</h1>
  <button @click="fetchData">Fetch Data GET</button>
  <button @click="sendData">Send Data with POST</button>
  <button @click="makeRequest">Make Custom Request</button>

  <div v-if="responseData">
    <h2>response Data:</h2>
    <pre>{{ responseData }}</pre>
  </div>
</template>

<script>
import axios from "axios";
import { ref } from "vue";

export default {
  name: "AxiosExample",
  setup() {
    const responseData = ref(null);

    const fetchData = async () => {
      try {
        const response = await axios.get(
          "https://jsonplaceholder.typicode.com/posts/1"
        );
        responseData.value = response.data;
      } catch (error) {
        console.error(error);
      }
    };

    const sendData = async () => {
      try {
        const response = await axios.post(
          "https://jsonplaceholder.typicode.com/posts",
          {
            title: "foo",
            body: "bar",
            userId: 1,
          }
        );
        responseData.value = response.data;
      } catch (error) {
        console.error(error);
      }
    };

    const makeRequest = async () => {
      try {
        const response = await axios({
          method: "get",
          url: "https://jsonplaceholder.typicode.com/posts/1",
          headers: {
            "Content-Type": "application/json",
          },
        });
        responseData.value = response.data;
      } catch (error) {
        console.error(error);
      }
    };

    return {
      fetchData,
      sendData,
      makeRequest,
      responseData,
    };
  },
};
</script>

<style>
button {
  display: block;
  margin-bottom: 10px;
}
</style>
  • template
    • 각 버튼은 클릭 이벤트에 반응하여 컴포넌트의 메서드(get, post, 커스텀 요청)을 수행한다.
    • v-if 디렉티브를 사용하여 responseData가 존재할 때만 해당 div를 렌더링한다. 즉 서버로부터 응답 데이터를 받아왔을 때만 이 부분이 화면에 보인다.
  • script
    • GET 요청 (fetchData): axios.get을 사용해 지정된 url에서 데이터를 가져온다. 성공적으로 가져오면 responseData 변수에 저장한다.
    • POST 요청 (sendData): axios.post를 사용해 데이터를 서버에 전송한다. 전송할 데이터는 title, body, userId 필드를 포함한 객체이다. 성공적으로 데이터를 전송하면 responseData 변수에 응답 데이터를 저장한다.
    • 일반 요청 (makeRequest): axios 함수를 직접 호출하여 요청을 수행한다. 메서드, url, 헤더 등을 직접 설정할 수 있다. 여기서는 GET 요청을 수행하며 성공 시 responseData 변수에 응답 데이터를 저장한다.
  • 위 url은 JSONPlaceholder라는 무료 온라인 REST API 엔드포인트이다. 테스트와 프로토타이핑을 위해 가짜 데이터를 제공하는 무료 서비스다.

결과)

728x90

'Vue.js' 카테고리의 다른 글

[Vue] 할 일 관리 앱 만들기(1)  (2) 2024.06.05
[Vue] template | 데이터 마이닝, 디렉티브, 속성(computed, methods, watch)  (25) 2024.05.28
[Vue] 라우팅 구성 (hashchange) | vue-router 사용하기  (0) 2024.05.27
[Vue] 컴포넌트 기초 - 정의 및 사용, Props, 이벤트 전달, slot, 동적 컴포넌트  (0) 2024.05.25
[Vue] 화면에 Hello Vue 출력하기  (0) 2024.05.24
'Vue.js' 카테고리의 다른 글
  • [Vue] 할 일 관리 앱 만들기(1)
  • [Vue] template | 데이터 마이닝, 디렉티브, 속성(computed, methods, watch)
  • [Vue] 라우팅 구성 (hashchange) | vue-router 사용하기
  • [Vue] 컴포넌트 기초 - 정의 및 사용, Props, 이벤트 전달, slot, 동적 컴포넌트
gamzaggang7
gamzaggang7
    250x250
  • gamzaggang7
    abcdefghklpqrstuvwxyz
    gamzaggang7
  • 전체
    오늘
    어제
    • 분류 전체보기
      • CS
        • OS
        • 자료구조_알고리즘
      • Java
      • Javascript
      • Node.js
      • React
      • Vue.js
      • 코딩테스트
        • 백준-Java
        • 프로그래머스-JS
      • Canvas
      • HTML, CSS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    props
    css
    프로그래머스
    Node.js
    자바백준풀이
    자바공부
    BFS
    hashchange
    vue.js
    fecolormatrix
    오즈코딩스쿨
    vue animation
    React
    Next.js
    자바
    스택
    백준풀이
    npm
    2차원배열
    vue modal
    큐
    dat.gui
    til
    서버구축
    라우팅
    canvas
    정렬
    자바스크립트
    fegaussianblur
    해시
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gamzaggang7
[Vue] axios 사용하기
상단으로

티스토리툴바