<script src="https://unpkg.com/axios/dist/axios.min.js"></script> // CDN
npm install axios // NPM
설치를 한 후 컴포넌트에서 아래와 같은 코드로 사용한다.
methods: {
fetchData: function() {
axios.get('URL 주소');
}
}
<script>
const HOST = "";
export default {
methods: {
getData() {
this.$axios
.get(HOST + "/api/getData", {
headers: { "X-AUTH-TOKEN": "인증 받음을 증명하는 토큰" },
})
.then((res) => {
console.log(res.staus);
console.log(res.data);
})
.catch((error) => {
console.log(error);
})
.finally(() => {
console.log("항상 마지막에 실행");
});
},
},
};
</script>
<script>
const HOST = "";
export default {
methods: {
postData() {
let saveData = {};
saveData.title = "axios POST request";
saveData.index = 0;
this.$axios
.post(HOST + "/api/postData", JSON.stringify(saveData))
.then((res) => {
console.log(res.staus);
console.log(res.data);
})
.catch((error) => {
console.log(error);
})
.finally(() => {
console.log("항상 마지막에 실행");
});
},
},
};
</script>
<script>
const HOST = "";
export default {
methods: {
putData() {
let number = "0";
let updateData = {};
updateData.title = "axios PUT request";
updateData.index = 0;
this.$axios
.put(HOST + "/api/putData" + number, JSON.stringify(updateData))
.then((res) => {
console.log(res.staus);
console.log(res.data);
})
.catch((error) => {
console.log(error);
})
.finally(() => {
console.log("항상 마지막에 실행");
});
},
},
};
</script>
<script>
const HOST = "";
export default {
methods: {
deleteData() {
let deleteKey = "123";
this.$axios
.delete(HOST + "/api/deleteData" + deleteKey)
.then((res) => {
console.log(res.staus);
console.log(res.data);
})
.catch((error) => {
console.log(error);
})
.finally(() => {
console.log("항상 마지막에 실행");
});
},
},
};
</script>
axios를 사용하면서 주의할 점이 있는데 axios가 Promise 기반의 자바스크립트 비동기 처리방식을 사용한다는 것이다. 이때의 문제점은 처리 순서를 지정하지 않으면 request 요청을 보내고 나서 response로 응답도 받기 전에 바로 다음 구문을 수행해 버리기 때문에 원하는 결과를 받아오지 못한다는 점이다. 이때 해결방법은 async/await를 사용하여 처리 순서를 지정해 주는 것이다.
<script>
const HOST = "";
export default {
data() {
return {
allPeopleList: [],
allAnimalList: [],
};
},
created() {
this.getMultiData();
},
methods: {
async getMultiData() {
try {
this.allPeopleList = await axios
.get(HOST + "api/getAllPeople")
.then((res) => {
console.log(res.staus);
console.log(res.data);
})
.catch((error) => {
console.log(error);
})
.finally(() => {
console.log("항상 마지막에 실행");
});
console.log(this.allPeopleList);
} catch (error) {
console.error(error);
}
try {
this.allAnimalList = await axios
.get(HOST + "api/getAllAnimal")
.then((res) => {
console.log(res.staus);
console.log(res.data);
})
.catch((error) => {
console.log(error);
})
.finally(() => {
console.log("항상 마지막에 실행");
});
console.log(this.allAnimalList);
} catch (error) {
console.error(error);
}
}
},
};
</script>
위의 예제는 컴포넌트가 생성될 때, 모든 사람과 모든 동물의 데이터 목록을 서버에서 가져오는 예제.
axios를 사용하는 getMultiData 함수를 보면 async 키워드가 붙은 것을 볼 수 있다. 각 API를 호출하는 axios 앞에 await 키워드를 붙여줌으로써 처리 순서를 지정해 주었다.
한마디로 모든 사람의 데이터를 가져오는 구문이 끝나야 동물 데이터 구문이 시작되는 것이다.
async/await는 오류 디버깅을 위해 try - catch 구문을 사용해야 한다.
Axios는 HTTP통신 라이브러리인데 뭔가 CRUD 비슷한 느낌을 내면서도 다르니깐 헷갈린다. 하지만 이제 업무 투입이 된다면 백단에서 만들어진 HTTP 통신을 원할하게 하기 위해 다 머리속에 집어 넣어야된다. 그리고 자바에서 사용하는 try catch 문을 Vue에서도 사용한다는 것이 신기했고, 일단 이것을 공부하기 위해 내 JavaScript 지식이 너무 빈약하기에 JavaScript 또한 시간이 날 때 마다 틈틈히 공부를 해야겠다.