axiso
Axios ๋ ๋ธ๋ผ์ฐ์ , Node.js ๋ฅผ ์ํ Promise API ๋ฅผ ํ์ฉํ๋ HTTP ๋น๋๊ธฐ ํต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(return ์ promise ๊ฐ์ฒด๋ก ํด์ฃผ๊ธฐ ๋๋ฌธ์, response ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ฌ์ด ์ฅ์ )
axios ํน์ง
- ์ด์ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ธ๋ผ์ฐ์ ์ XMLHttpRequest ๊ฐ์ฒด ๋๋ Node.js์ http api ์ฌ์ฉ
- Promise(ES6) API ์ฌ์ฉ
- ์์ฒญ๊ณผ ์๋ต ๋ฐ์ดํฐ์ ๋ณํ
- HTTP ์์ฒญ ์ทจ์
- HTTP ์์ฒญ๊ณผ ์๋ต์ JSON ํํ๋ก ์๋ ๋ณ๊ฒฝ
axios ๊ธฐ์ด๋ฌธ๋ฒ
/* axios ํ๋ผ๋ฏธํฐ ๋ฌธ๋ฒ ์์ */
axios({
method: "get", // ํต์ ๋ฐฉ์(GET/POST)
url: "www.google.com", // ์๋ฒ
headers: {'X-Requested-With': 'XMLHttpRequest'} // ์์ฒญ ํค๋ ์ค์
params: { name: "ooweat", blog: "tistory" }, // ?ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ฌ
responseType: 'json', // default
maxContentLength: 2000, // http ์๋ต ๋ด์ฉ์ max ์ฌ์ด์ฆ
validateStatus: function (status) {
return status >= 200 && status < 300; // default
}, // HTTP์๋ต ์ํ ์ฝ๋์ ๋ํด promise์ ๋ฐํ ๊ฐ์ด resolve ๋๋ reject ํ ์ง ์ง์
proxy: {
host: '127.0.0.1',
port: 3100,
auth: {
username: 'ooweat',
password: '1234'
}
}, // proxy์๋ฒ์ hostname๊ณผ port๋ฅผ ์ ์
maxRedirects: 5, // node.js์์ ์ฌ์ฉ๋๋ ๋ฆฌ๋ค์ด๋ ํธ ์ต๋์น๋ฅผ ์ง์
httpsAgent: new https.Agent({ keepAlive: true }), // node.js์์ https๋ฅผ ์์ฒญ์ ํ ๋ ์ฌ์ฉ์ ์ ์ agent๋ฅผ ์ ์
})
.then(function (response) {
console.log(response.data)
// response Action
});
axios ์์ฉ๋ฌธ๋ฒ
const API =axios.create({
baseURL: `http://localhost:8080/`,
timeout: 30000,
headers: {
"Content-Type" : `application/json;charset=UTF-8`,
"Access-Control-Allow-Origin": "*",
"Accept": "application/json",
}
});
let [resData, setTotAmt] = useState({
totAmount : 0,
})
API.post("/common/test", reqData)
fetch
Javascript ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ผ๋ก, Promise ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ด axios ๊ฐ ๋ฑ์ฅํ๊ธฐ ์ , ๋น๋๊ธฐ ์ฒ๋ฆฌ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ฐ ์, ํ์์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ด๋ค.
fetch ๋ ๋๊ฐ์ ์ฝ๋๊ฐ ๋ฐ๋ณต๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์, ๋ชจ๋ํ๋ฅผ ํตํด ๋ฐ๋ก ์ ์ธํด๋๊ณ ๋ณ์๋ฅผ ํ ๋นํ๋ ๊ฒ์ด ํธ์์ฑ์ด ์ฉ์ดํ๋ค.
async function post(host, path, body, headers = {}) {
const url = `https://${host}/${path}`;
const options = {
method: "POST",
headers: {
"Content-Type": "application/json",
...headers,
},
body: JSON.stringify(body),
};
const res = await fetch(url, options);
const data = await res.json();
if (res.ok) {
return data;
} else {
throw Error(data);
}
}
//์ฌ์ฉ ์,
post("news.naver.com", "posts", {
title: "๋ ์จ",
body: "ํ์ฐฝ",
contentSeq: 1049,
})
.then((data) => console.log(data))
.catch((error) => console.log(error));
fetch ๊ธฐ์ด ๋ฌธ๋ฒ
fetch("https://news.naver.com", {
method: "POST", // GET(Default), POST, PUT(์ ์ฒด์์ ), PATCH(์ผ๋ถ์์ ), DELETE(์ญ์ )
headers: { // ํค๋ ์กฐ์
"Content-Type": "application/json",
},
body: JSON.stringify({ // ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ฅผ jsonํ ํ๋ค.
title: "๋ ์จ",
body: "ํ์ฐฝํ ๋ด๋ !",
contentSeq: 1049,
}),
})
.then((response) => response.json())
.then((data) => console.log(data))
fetch ์์ฉ ๋ฌธ๋ฒ
fetch(myRequest)
.then(response => {
if (response.status === 200) {
return response.json();
} else {
throw new Error('Something went wrong on api server!');
}
})
.then(response => {
console.debug(response);
// ...
}).catch(error => {
console.error(error);
});
#Index.jsx
import React, {useEffect, useState} from "react";
import API from '../util/api.js';
import {useParams} from "react-router-dom";
import Loader from "../component/loader";
useEffect(() => {
async function callAPI() {
const res = await API.post("/common/info", reqData)
console.log(res.data)
setResData(res.data)
setLoading(false)
}
setLoading(true)
callAPI().then(r => console.log("Connected"))
}, []);
axios vs fetch ์ ์ฐจ์ด์
axios |
fetch |
3rd Party lib ๋ก ์ค์น๊ฐ ํ์ |
ํ๋ ๋ธ๋ผ์ฐ์ ์ ๋นํธ์ธ์ด๋ผ ์ค์น ํ์ ์์ |
XSRF ๋ณดํธ๋ฅผ ํด์ค๋ค. |
๋ณ๋ ๋ณดํธ ์์ |
data ์์ฑ์ ์ฌ์ฉ |
body ์์ฑ์ ์ฌ์ฉ |
data๋ object๋ฅผ ํฌํจํ๋ค |
body๋ ๋ฌธ์์ดํ |
status๊ฐ 200์ด๊ณ statusText๊ฐ ‘OK’์ด๋ฉด ์ฑ๊ณต์ด๋ค |
์๋ต๊ฐ์ฒด๊ฐ ok ์์ฑ์ ํฌํจํ๋ฉด ์ฑ๊ณต์ด๋ค |
JSON๋ฐ์ดํฐ ํ์์ผ๋ก ์๋๋ณํ |
.json()๋ฉ์๋ ์ ์ธ ํ์ |
์์ฒญ์ ์ทจ์ํ ์ ์๊ณ ํ์์์์ด ๊ฐ๋ฅํ๋ค. |
ํด๋น ๊ธฐ๋ฅ ์กด์ฌ ํ์ง์์ |
HTTP ์์ฒญ์ ๊ฐ๋ก์ฑ์ ์์ |
๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ์ง ์์ |
Download ์งํ์ ๋ํด ๊ธฐ๋ณธ์ ์ธ ์ง์์ ํจ |
์ง์ํ์ง ์์ |
๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ง์ํจ |
Chrome 42+, Firefox 39+, Edge 14+, and Safari 10.1+์ด์์ ์ง์ |