[JS] Axios

Local Gajiยท2023๋…„ 7์›” 4์ผ

JavaScript

๋ชฉ๋ก ๋ณด๊ธฐ
17/18

๐ŸŽˆ Axios ๋ž€

Promise API๋ฅผ ํ™œ์šฉํ•˜๋Š” HTTP ๋น„๋™๊ธฐ ํ†ต์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๐Ÿ”ฐ Axios๋ฅผ ์“ฐ๋Š” ์ด์œ 

  1. ์š”์ฒญ๊ณผ ์‘๋‹ต์„ JSON ํ˜•ํƒœ๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค.
  2. ๋ฌธ๋ฒ•์ด ๊ฐ„์†Œํ™”
  3. Response Timeout ์„ค์ •๊ฐ€๋Šฅ
  4. Request ์ทจ์†Œ ๊ฐ€๋Šฅ
  5. HTTP Requests ์˜ Intercept ๊ฐ€๋Šฅ
  6. ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ
  7. XSRF Protection ๋ณด์•ˆ ๊ธฐ๋Šฅ ์ œ๊ณต

๐Ÿ”ฐ ์„ค์น˜

Using npm:
$ npm install axios

Using bower:
$ bower install axios

Using yarn:
$ yarn add axios

Using jsDelivr CDN:
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>

Using unpkg CDN:
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

๐Ÿ”ฐ import

import axios from 'axios'

๐ŸŽˆ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

axios({
  url: 'URL',
  method: 'get|post|put|patch|delete ๋“ฑ..',
  data: {
    ํ‚ค: '๊ฐ’',
    ํ‚ค: '๊ฐ’',
  }
})
.then((response) => {
  // ์„ฑ๊ณต์‹œ
})
.catch((error) => {
  // ์‹คํŒจ์‹œ
})
.finally(() => {
  // ํ•ญ์ƒ
})

๐Ÿ”ฐ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ์˜ต์…˜

์š”์ฒญ์„ค๋ช…
method์š”์ฒญ ๋ฐฉ์‹ (๋ฏธ์ง€์ •์‹œ get)
url์„œ๋ฒ„ ์ฃผ์†Œ
baseURLurl์ด ์ƒ๋Œ€๊ฒฝ๋กœ์ผ ๋•Œ, url ์•ž์— ๋ถ™๋Š” ์ฃผ์†Œ
header์š”์ฒญ ํ—ค๋”
databody์— ์‹ค์„ ๋ฐ์ดํ„ฐ
responseType์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•ด์ฃผ๋Š” ๋ฐ์ดํ„ฐ์˜ ํƒ€์ž… (json, text ๋“ฑ)
withCredentialscross-site access-control ์š”์ฒญ ํ—ˆ์šฉ ์œ ๋ฌด (true์ผ ๋•Œ cross-origin์œผ๋กœ ์ฟ ํ‚ค๊ฐ’ ์ „๋‹ฌ)




๊ธฐ๋ณธ ํ˜•์‹์—๋Š” ๊ฐ์ฒด ์˜ต์…˜์ด ๋„ˆ๋ฌด ๋งŽ์•„
์ด๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋„๋ก Axios ๋‹จ์ถ• ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

GET : axios.get(url[, config])
POST : axios.post(url, data[, config])
PUT : axios.put(url, data[, config])
DELETE : axios.delete(url[, config])

๐ŸŽˆ GET ์š”์ฒญ

๊ทธ๋ƒฅ URL์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ฑฐ๋‚˜, ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จ์‹œ์ผœ์„œ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

const axios = require('axios');

axios.get('url', {
      params: {
      ID: 12345
    }
  })
  .then((response) => {
    // ์„ฑ๊ณต์‹œ
  })
  ...
  
// ๋˜๋Š”
axios.get('/user?ID=12345')
  ...

๐ŸŽˆ POST ์š”์ฒญ

๋ฐ์ดํ„ฐ๋ฅผ Message Body์— ํฌํ•จ์‹œ์ผœ ๋ณด๋‚ธ๋‹ค.

axios.post('url', {
    ํ‚ค: '๊ฐ’',
    ํ‚ค: '๊ฐ’',
  })
  ...

๐ŸŽˆ DELETE ์š”์ฒญ

GET๊ณผ ๊ฐ™์ด ๊ทธ๋ƒฅ URL๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ฑฐ๋‚˜,
ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จ์‹œ์ผœ์„œ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

axios.delete('url')
  ...

// ๋˜๋Š”
  
axios.delete('url',{
    data: {
      ํ‚ค: ๊ฐ’,
      ํ‚ค: ๊ฐ’,
      ํ‚ค: ๊ฐ’,
    }
  })

๐ŸŽˆ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์š”์ฒญ ๋™์‹œ ์ˆ˜ํ–‰

const ์š”์ฒญ1 = () => {
  return axios.get('์š”์ฒญurl1');
}

const ์š”์ฒญ2 = () => {
  return axios.get('์š”์ฒญurl2');
}

axios.all([์š”์ฒญ1(), ์š”์ฒญ2(), โ€ฆ])
  .then(() => {
  const ๊ฒฐ๊ณผ1 = result[0];
  const ๊ฒฐ๊ณผ2 = result[2];
  โ€ฆ
  })

๐ŸŽˆ ์‘๋‹ต ๋ฐ์ดํ„ฐ

์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต ๋ฐ›์€ response ๊ฐ์ฒด๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

{
  data: {},          // ์‘๋‹ต ๋ฐ์ดํ„ฐ

  status: 200,       // HTTP ์ƒํƒœ ์ฝ”๋“œ

  statusText: 'OK',  // HTTP ์ƒํƒœ ๋ฉ”์‹œ์ง€

  headers: {},       // ํ—ค๋”

  config: {},        // ์š”์ฒญ์„ ์œ„ํ•ด `axios`๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ตฌ์„ฑ

  request: {}        
  // `request`๋Š” ์‘๋‹ต์„ ์ƒ์„ฑํ•œ ์š”์ฒญ
  // ๋ธŒ๋ผ์šฐ์ €: XMLHttpRequest ์ธ์Šคํ„ด์Šค
  // Node.js: ClientRequest ์ธ์Šคํ„ด์Šค(๋ฆฌ๋””๋ ‰์…˜)
}

0๊ฐœ์˜ ๋Œ“๊ธ€