axios 엑시오스란
Axios란
- Promise 기반 HTTP 비동기 통신 라이브러리
- 운영환경에 따라 브라우저 간 XMLHttpRequest 객체 또는 Node.js의 HTTP API를 사용
- 요청과 응답을 JSON형태로 자동 변경
- 라이브러리로, npm이나 기타 방법을 통한 별도 설치 필요
npm install axios bower install axios yarn add axios <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
구성
axios({
method: "", // 통신 방식
url: "", // 서버
headers: {} // 요청 헤더 설정
params: {}, // ?파라미터를 전달
responseType: '',
})
.then(function (response) {
setData(response.data);
});
- 구성옵션은 url이 필수값
- url : 요청에 사용될 서버 URL
- url 값이 상대url이라면, 앞에 자동적으로 baseURL이 붙는다
- ‘/user’ 입력 시, ‘http://localhost:8080/user’
- method : 요청할 때 사용될 메서드
- 기본값 get
- headers : 서버에 전송 될 사용자 정의 헤더
- { ‘X-Requested-With’: ‘XMLHttpRequest’ }
- params : 요청과 함께 전송될 URL 파라미터
- 일반 객체이거나 URLSearchParams 객체여야 한다.
- URL뒤에 붙는 ?key=value를 객체로 표현한 것
params:{id:’userid’}
- data : 요청 본문 (request body)로 전송할 데이터
- put, post, patch 요청 메서드에만 적용 가능
- transformRequest가 설정되지 않은 경우에는 string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams 즁 하나여야 한다
- 브라우저 전용 : FormData, File, Blob
- Node.js 전용 : Stream, Buffer
data : {id:’userId’}
- responseType : 서버에서 응답할 데이터 타입 설정
- 기본값 json
- arraybuffer, blob, document, json, text, stream
- responseEncoding : 응답 디코딩에 사용할 인코딩
- 기본값 utf8
- 클라이언트 사이드 요청 또는 responseType이 stream일 경우에는 무시한다
- transformRequest : 서버에 보내기 전 요청 데이터를 변경
- put, post, patch에만 적용 가능
- 배열의 마지막 함수는 버퍼(buffer)의 문자열이나 인스턴스를 반환해야 한다
- ArrayBuffer, FormData, Stream 헤더 객체를 수정 가능
transformRequest: [function(data,headers) {.. return data}]
- transformResponse : 응답 데이터에 대한 변경을 전달해 then/catch에 전달하도록 허용한다
transformResponse: [functoin(data){..return data;}]
- paramsSerializer : params를 직렬화하는 옵션 함수
- timeout : 요청이 타임아웃되는 밀리초를 설정
- 기본값 0
- timeout 설정시간보다 길어지는 경우 요청이 중단된다
- withCredentials : 자격증명을 사용, cross-site-access-control 요청 허용여부를 설정한다
- 기본값 false
- adapter : 테스트를 보다 쉽게 해주는 커스텀 핸들링 요청을 허용
- 유효한 응답(promise)를 반환해야 한다
- auth : HTTP 기본인증이 사용되며, 자격증명을 제공함을 나타낸다
- 기존의 Authorization 커스텀 헤더를 덮어쓰는 헤더를 설정한다
auth:{username:’asd’, password:’123’}
- 기존의 Authorization 커스텀 헤더를 덮어쓰는 헤더를 설정한다
- xsrfCookieName : xsrf 토큰에 대한 값으로 사용할 쿠키 이름
- xsrfHeaderName : xsrf 토큰 값을 운반하는 HTTP 헤더 이름
- onUploadProgress : 업로드 프로그레스 이벤트 처리
- onDownloadProgress : 다운르도 프로그레스 이벤트 처리
- maxContentLength : HTTP 응답 콘텐츠의 최대 크기를 바이트 단위로 설정
- validateStatus : 주어진 HTTP응답 상태코드에 대한 약속을 해결할지 거절할지 정의
- maxRedirects : Node.js에서 리다이렉트 가능한 최대 개수를 정의
- 기본값 5
- socketPath : Node.js에서 사용될 UNIX 소켓 정의
- 기본값 null
- httpAgent, httpsAgent : Node.js에서 http,https 요청을 수행할 때 사용할 커스텀에이전트 정의
- proxy : 프록시 서버의 호스트 이름과 포트를 정의
- cancelToken : 요청을 취소하는데 사용할 수 있는 취소토큰 지정
구성을 설정한 인스턴스 생성
const instance = axios.create({
baseURL : 'http://localhost:9999',
headers: { 'X-Custom-Header': 'foobar' },
timeout: 1000,
})
const onClick =() => {
instance.get('url')
.then((resp)=>{
setData(resp.data);
});
}
- 기본 구성을 설정한 인스턴스를 생성해 axios 기본세팅을 할 수 있다.
단축메서드
- get : 주로 리소스 조회에 사용
- axios.get(url)
- axios.get(url,config)
- post : 요청 데이터 처리, 주로 등록세 아용
- axios.post(url,data)
- axios.post(url,data,config)
- put : 리소스를 대체할 때 주로 사용
- delete : 리소스를 삭제할 때 주로 시용
const onClick = () => {
axios.get('url')
.then((resp)=>{
setData(resp.data);
});
}
- 비동기 방식으로 url에 get방식으로 접근하여 응답을 받아온다.
- then 을 통해, 받아온 응답을 이용해 처리할 수 있다.
const onClick = async() => {
try{
const resp = await axios.get('url');
setData(resp.data);
}catch(error){
console.error(error)
}
}
- 비동기 방식이지만, async와 await을 사용하면 promise가 끝날 때까지 기다렸다가 결과값을 특정 변수에 담을 수 있다.
axios.get
1
axios.get('/getOne',{
params:searchVO
})
axios.get('/getOne',{
params:{
searchKeyword:'a',
searchCondition:'b'
}
})
@GetMapping("/getOne")
public ResultVO getOne(SearchVO searchVO) throws Exception{
...
return ResultVO
}
2
axios.get('/getTwo?key=value')
@GetMapping("/getTwo")
public ResultVO getTwo(@RequestParam int key)
...
return ResultVO
}
3
//es6의 템플릿리터럴 이용
axios.get('getThree/${key})
@GetMapping("/getThree/{key}
public ResultVO getThree(@PathVariable int key)
...
return ResultVO
}
axios.post
1
axios.post('/postOne',searchVO)
axios.post('/postOne',{
searchKeyword:'a',
searchCondition:'b'
})
@PostMapping('/postOne')
public ResultVO postOne(@RequestBody SearchVO searchVO) {
...
return ResultVO
}
- 파일 업로드 등 formData를 내보낼 시
const form = new FormData();
form.append("file",file);
form.append("name",name);
axios.post('/url',form,{
headers:{
"content-type": "multipart/form-data",
},
})
public ResultVO insertForm(final MultipartHttpServletRequest multiRequest,DataVO dataVO) throws Exception {
}
axios.put
- 서버 내부적으로 get-post 과정을 거치기 때문에 post 메서드와 비슷한 형태
1
axios.put('/putOne',boardVO)
axios.put('/putOne',{
boardNo:1,
boardTitle:'title',
boardContent:'content'
})
@PutMapping("/putOne")
public ResultVO putOne(@RequestBody BoardVO boardVO){
...
return ResultVO
}
2
axios.put('/putTwo/${no}',boardVO)
@PutMapping("/putTwo/{no}")
public ResultVO putTwo(@PathVariable int no, @RequestBody BoardVO boardVO){
...
return ResultVO
}
axios.delete
- 일반적으로 body가 비어있으며, 리소스 삭제를 목적으로 사용된다
axios.delete('/deleteOne/${id}/${pw})
@DeleteMapping("/deleteOne/{id}/{pw}")
public ResultVO deleteOne(@PathVariable String id, @PathVariable String pw){
...
return ResultVO
}