axios 의 간단 한 패키지 및 인 스 턴 스 코드 사용
최근 프로젝트 를 구축 할 때 요청 한 패 키 징 을 생각 하고 어떻게 패 키 징 해 야 좋 을 지 고민 했다.사내 들 에 게 는 작은 일 일 수도 있 지만 저 에 게 는 작은 도전 이 라 고 할 수 있 습 니 다.내 가 생각 하기에 요청 한 기본 설정 과 구체 적 인 인 인 터 페 이 스 는 두 개의 파일 에 두 어야 하기 때문에 나 는 두 개의 파일 axios.js 와 api.js 를 새로 만 들 었 다.
axios.js
axios.js 는 주로 axios 에 대한 기본 설정 입 니 다:baseURL 요청 차단기 응답 차단기 등등
import axios from 'axios';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import router from '../router';
우선 현재 js 에 axios 를 도입 합 니 다.element 를 도입 하 는 것 은 현재 js 에서 구성 요 소 를 사용 할 수 있 도록 하 는 것 입 니 다.응답 차단기 에서 각종 반환 값 을 직접 제시 하기 위해 서 입 니 다.라 우 터 를 도입 한 것 은 응답 차단기 에서 구체 적 인 반환 값 에 따라 페이지 를 이동 하기 위해 서 입 니 다.예 를 들 어 권한 이 없 으 면 로그 인 페이지 로 이동 합 니 다.
if (process.env.NODE_ENV === 'development') {
axios.defaults.baseURL = 'api';
} else if (process.env.NODE_ENV === 'production') {
axios.defaults.baseURL = 'https://xxxxxxxxxx/index/';
}
baseURL 의 처리 에 대해 저 는 개발 환경 과 생산 환경 을 구분 하 였 습 니 다.
// formdata
axios.interceptors.request.use((config) => {
config.headers['Content-Type'] = 'application/json';
if (config.method === 'post') {
//FormData
if (Object.prototype.toString.call(config.data) === '[object FormData]') {
//
config.headers['Content-Type'] = 'multipart/form-data';
} else if (Object.prototype.toString.call(config.data) === '[object String]') {
config.headers['Content-Type'] = 'application/x-www-form-urlencoded';
}
} else {
config.headers['Content-Type'] = 'application/json';
}
return config;
});
//
axios.interceptors.response.use(
(config) => {
let value = config.data;
if (config.status && config.status === 200) {
if (typeof value === 'string') {
if (value === 'timeout') {
ElementUI.MessageBox.confirm(' , ?', ' ', {
confirmButtonText: ' ',
type: 'warning'
}).then(() => {
router.push({ name: 'login' });
});
}else {
ElementUI.Message.info(value);
}
}
}
return config;
},
(err) => {
let value = err.response.statusText;
switch (err.response.status) {
case 400:
ElementUI.Message.error(' , ')
break;
case 401:
case 403:
case 404:
case 405:
ElementUI.Message.warning(value);
break;
default:
ElementUI.Message.error(' , !' + value);
break;
}
return err.response
}
);
응답 차단기 에 대해 서 는 제 백 엔 드 가 되 돌아 오 는 값 에 따라 처리 합 니 다.백 엔 드 를 별로 하지 않 았 기 때문에 되 돌아 오 는 것 에 대해 서 만 간단하게 처 리 했 습 니 다.다음은 get 과 post 에 대한 패키지 입 니 다.
export async function axiosGet(url, params = {}) {
let res = await axios.get(url, { params: params });
if(res.status === 200){
return res.data
}else {
throw res.statusText
}
}
export async function axiosPost(url, params = {}) {
let res = await axios.post(url, params);
if(res.status === 200){
return res.data
}else {
throw res.statusText
}
}
async 와 await 를 사용 하여 반환 값 을 직접 가 져 와 판단 합 니 다.반환 에 성공 하면 출력 반환 값 이 성공 하지 못 하면 오 류 를 던 집 니 다.마지막 으로 봉 인 된 방법 내 보 내기
api.js
전체 api.js 는 프로젝트 내 모든 인터페이스 가 저 장 된 곳 입 니 다.
import { axiosGet,axiosPost } from './axios'
axios.js 를 도입 하여 봉 인 된 axios Get 과 axios Post 를 가 져 옵 니 다
export default {
getLogin:(params = {}) => {
return axiosPost('/login', params)
},
getUser:(params = {}) => {
return axiosGet('http://localhost:3000/user', params)
}
}
여기 서 나 는 간단 한 두 개의 인 터 페 이 스 를 사용 하여 예 를 들 었 는데,api.js 에서 의 처 리 는 이미 완성 되 었 다.설 정 된 인터페이스 사용 하기
여기까지 우리 의 axios 는 이미 봉인 을 마 쳤 습 니 다.다음은 사용 한 시범 입 니 다.
import DbauditServer from '@/server/api'
// api.js
let formData = new FormData
formData.append('password', this.formLabelAlign.password)
let res1 = await DbauditServer.getLogin(formData) //
let res2 = await DbauditServer.getUser()
물론 섬세 할 수도 있 습 니 다.이전에 get 과 post 를 봉인 할 때 오류 가 발생 하면 반환 값 을 직접 던 지기 때문에 인터페이스의 호출 도 try catch 로 감 싸 서 error 를 특정한 처리 하면 됩 니 다.총결산
여기 서 axios 에 관 한 간단 한 패 키 징 과 사용 에 관 한 글 은 여기까지 소개 되 었 습 니 다.더 많은 axios 간단 한 패 키 징 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Node.js에서 LINE Notify로 이미지 보내기 샘플 #protooutNode.js의 axios를 사용하여 LINE Notify에 이미지를 보내는 샘플입니다. 찾아도 별로 없었기 때문에 남겨 둡니다. axios 설치를 잊지 마세요. imageFullsize와 imageThumbnail...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.