Axios
๋?
axios๋, ๋ธ๋ผ์ฐ์ , Node.js๋ฅผ ์ํ Promise API๋ฅผ ํ์ฉํ๋ HTTP ๋น๋๊ธฐ ํต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋ฐฑ์๋์ ํ๋ก ํธ์๋๋ ํต์ ์ ์ฝ๊ฒ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
axios
ํน์ง
- ์ด์ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ธ๋ผ์ฐ์ ์ XMLHttpRequest ๊ฐ์ฒด ๋๋ Node.js์ http api ์ฌ์ฉ
- Promise(ES6) API ์ฌ์ฉ
- ์์ฒญ๊ณผ ์๋ต ๋ฐ์ดํฐ์ ๋ณํ
- HTTP ์์ฒญ ์ทจ์
- HTTP ์์ฒญ๊ณผ ์๋ต์ JSON ํํ๋ก ์๋ ๋ณ๊ฒฝ
HTTP(HyperText Transfer Protocol)๋? HTML๊ณผ ๊ฐ์ ํ์ดํผ๋ฏธ๋์ด ๋ฌธ์๋ฅผ ์ ์กํ๊ธฐ์ํ ์ ํ๋ฆฌ์ผ์ด์ ๋ ์ด์ด ํ๋กํ ์ฝ. ํต์ ๊ท์ฝ.
axios
์ฌ์ฉ๋ฒ
axios
์ Request method
๋
- GET : axios.get(url[, config])
- POST : axios.post(url, data[, config])
- PUT : axios.put(url, data[, config])
- DELETE : axios.delete(url[, config])
axios
์์ Request Method
๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ axios
์ .
์ ๋ถํ๋ฉฐ ์๋ฌธ์๋ก Req
Method๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋น ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ์๋ API์ ์ฃผ์๋ฅผ ๋ฃ๋๋ค.
:: axios
์ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ
์ผ๋ฐ์ ์ผ๋ก axios
์ 4๊ฐ์ง ๊ธฐ๋ณธ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ง์ ํด์ผํ ๊ฒ๋ค์ด ์๋ค.
4๊ฐ์ง ๊ธฐ๋ณธ Params
- Method
- Url
- Data (optional)
- Params (optional)
์ด 4๊ฐ์ง ๋ฐฉ๋ฒ์ axios์ ์๋ ค์ค์ผ ํ๋ค.
axios({
method: "get",
url: "url",
responseType: "type",
}).then(function (response) {
// response Action
});
๋ง์ฝ POST ๋ฉ์๋์์ data๋ฅผ ์ ์กํ๊ธฐ ์ํด์๋ url ๋ฐ์ data Object๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค.
:: axios
์ ๋จ์ถ ์ฌ์ฉ๋ฒ
4๊ฐ์ง ๊ธฐ๋ณธ ํ๋ผ๋ฏธํฐ๋ฅผ ์๋ตํ๊ฑฐ๋ ๊ฐ๊ฒฐํ๊ฒ ์ฌ์ฉํ ์ ์๋ค
axios.get()
axios.get()
์ ์ฌ์ฉํ๋ 2๊ฐ์ง ์ํฉ์ด ์๋๋ฐ
2๊ฐ์ง ์ํฉ์ ๋ฐ๋ผ params: {}
๊ฐ์ฒด๊ฐ ์กด์ฌํ ์ง ์ํ ์ง๊ฐ ๊ฒฐ์ ๋๋ค.
- ๋จ์ ๋ฐ์ดํฐ(ํ์ด์ง ์์ฒญ, ์ง์ ๋ ์์ฒญ) ์์ฒญ์ ์ํํ ๊ฒฝ์ฐ
// callback ์ ์ฌ์ฉํ ๋,
axios
.get("url")
.then((response) => {
// response
})
.catch((error) => {
// ์ค๋ฅ๋ฐ์์ ์คํ
})
.then(() => {
// ํญ์ ์คํ
});
// async await ํจ์๋ฅผ ์ฌ์ฉํ ๋,
try {
const data = await axios.get("url");
} catch {
// ์ค๋ฅ ๋ฐ์์ ์คํ
}
- ํ๋ผ๋ฏธํฐ ๋ฐ์ดํฐ๋ฅผ ํฌํจ์ํค๋ ๊ฒฝ์ฐ (์ฌ์ฉ์ ๋ฒํธ์ ๋ฐ๋ฅธ ์กฐํ)
axios.get("url", {
params: {
id: 123
}
})
.then(response => {
// response
}).catch(error => {
// ์ค๋ฅ๋ฐ์์ ์คํ
}).then(() => {
// ํญ์ ์คํ
});
// async await ํจ์๋ฅผ ์ฌ์ฉํ ๋,
try {
const data = await axios.get("url",
params: {
id: 123
}
);
} catch {
// ์ค๋ฅ ๋ฐ์์ ์คํ
}
axios.post()
post
๋ฉ์๋์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ Message Body์ ํฌํจ์์ผ ๋ณด๋ธ๋ค.
get
๋ฉ์๋์์ params
๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์ ๋น์ทํ๊ฒ ์ํ๋๋ค.
axios
.post("url", {
username: "",
password: "",
})
.then((response) => {
// response
})
.catch((error) => {
// ์ค๋ฅ๋ฐ์์ ์คํ
})
.then(() => {
// ํญ์ ์คํ
});
// async await ํจ์๋ฅผ ์ฌ์ฉํ ๋,
try {
const data = await axios.post("url");
} catch {
// ์ค๋ฅ ๋ฐ์์ ์คํ
}
axios.put()
put
๋ฉ์๋๋ ์๋ฒ ๋ด๋ถ์ ์ผ๋ก get
โ post
๊ณผ์ ์ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์ post
๋ฉ์๋์ ๋น์ทํ ํํ์ด๋ค.
axios
.put("url", {
username: "",
password: "",
})
.then((response) => {
// response
})
.catch((error) => {
// ์ค๋ฅ๋ฐ์์ ์คํ
})
.then(() => {
// ํญ์ ์คํ
});
// async await ํจ์๋ฅผ ์ฌ์ฉํ ๋,
try {
const data = await axios.put("url", {
username: "",
password: "",
});
} catch {
// ์ค๋ฅ ๋ฐ์์ ์คํ
}
axios.delete()
delete
๋ฉ์๋์๋ ์ผ๋ฐ์ ์ผ๋ก body
๊ฐ ๋น์ด์๋ค.
๊ทธ๋์ ํํ๋ get
๊ณผ ๋น์ทํ ํํ๋ฅผ ๋์ง๋ง ํ ๋ฒ delete
๋ฉ์๋๊ฐ ์๋ฒ์ ๋ค์ด๊ฐ๊ฒ ๋๋ค๋ฉด ์๋ฒ ๋ด์์ ์ญ์ process๋ฅผ ์งํํ๊ฒ ๋๋ค.
axios
.delete("/user?ID=12345")
.then((response) => {
// handle success
console.log(response);
})
.catch((error) => {
// handle error
console.log(error);
})
.then(() => {
// always executed
});
// async await ํจ์๋ฅผ ์ฌ์ฉํ ๋,
try {
const data = await axios.delete("url");
} catch {
// ์ค๋ฅ ๋ฐ์์ ์คํ
}
๋ง์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๊ฒฝ์ฐ
ํ์ง๋ง query
๋ params
๊ฐ ๋ง์์ ธ์ ํค๋์ ๋ง์ ์ ๋ณด๋ฅผ ๋ด์ ์ ์์ ๋๋ ๋ ๋ฒ์งธ ์ธ์์ data
๋ฅผ ์ถ๊ฐํด์ค ์ ์๋ค.
axios
.delete("/user?ID=12345", {
data: {
post_id: 1,
comment_id: 5,
username: "april",
},
})
.then((response) => {
// handle success
console.log(response);
})
.catch((error) => {
// handle error
console.log(error);
})
.then(() => {
// always executed
});
// async await ํจ์๋ฅผ ์ฌ์ฉํ ๋,
try {
const data = await axios.delete("url");
} catch {
// ์ค๋ฅ ๋ฐ์์ ์คํ
}
:: React์์ axios
์ฌ์ฉ
๋ณดํต ํ๋ก์ ํธ์์๋
API์ ์คํ
,์๋ฒ์ ์ฃผ์
,credentials ์ค์
์ ๋ด๋นํ๋API.js
๋ผ๋ ํ์ผ์ ๋ง๋ค๊ณaxios
์๊ธฐ๋ณธ ์ค์
์ ๋ํด์ ์ง์ ํด์ฃผ๊ณ- ๊ฐ๊ฐ์ ์๋น์ค์์ ๊ฐ์ ธ๊ฐ ์ฌ์ฉํ๋ ํํ๋ก ๊ตฌํ.
axios
์ ์ธ์คํด์ค ์์ฑ/async await ํต์
๋จผ์ axios
์ ์ธ์คํด์ค๋ฅผ ์์ฑํด์ API๋ผ๋ ๋ณ์์ ๋ด๊ณ API๋ฅผ ๋ฐํ์ํจ๋ค.
// API.js
// axios ์ ์ธ์คํด์ค๋ฅผ ์์ฑ
import axios from "axios";
const API = axios.create({
BASE_URL: "",
headers: {
"Content-Type": "application/json",
},
withCredentials: true,
});
export default API;
๊ฐ๊ฐ ํ์ผ์์๋ async await ์ผ๋ก ์ฝ๋ฐฑ์ ์ฒ๋ฆฌํ์ฌ ํต์ ํ๋ค.
import API from "../utils/API";
export const login = async (code) => {
const { data } = await API.post("url", JSON.stringify(code));
return data;
};
Error Handling์ ์ํ try-catch๋ฌธ ์ฌ์ฉ
import API from "../utils/API";
export const refresh = async () => {
try {
const { data } = await API.get("url");
return data;
} catch {
// Error Handling
}
};