封裝axios庫
阿新 • • 發佈:2020-08-15
1、新建utils資料夾,在資料夾裡面新建reques.js
import axios from 'axios'; import { Message, Loading } from 'element-ui' import qs from 'qs'; //引數序列化,把資料格式轉為 x-www-form-urlencoded let BASE_URL = '', loadingInstance; let HOST = process.env.NODE_ENV; switch (HOST) { case 'development': BASE_URL = 'http://localhost:888';break; case 'test': BASE_URL = 'http://192.168.101.21/foxcubeCrm/'; break; default: BASE_URL = 'http://192.168.101.21/foxcubeCrm/'; } axios.create({ //crossDomain: true,//設定cross跨域 withCredentials: false, //跨域請求是否允許攜帶cookie資源憑證 baseurl: BASE_URL, time: 1000 //請求超時時間 // responseType:"arraybuffer" 返回的資料格式 }) // request請求攔截器 axios.interceptors.request.use(config => { // let token=localstorage.getItem('token'); // token && (config.headers.Authorization=token);//請求攜帶token // config.headers = { // 'Content-Type': 'application/x-www-form-urlencoded' //轉換資料格式// } loadingInstance = Loading.service({ lock: true, text: '飛速載入中……', }); return config; }, error => { return Promise.reject(error); }) // 成功狀態 有3的介面一般是資源重定向 // service.defaults.validateStatus=status=>{ // return /^(2|3)\d{2}$/.test(status); // }; // response響應攔截器 axios.interceptors.response.use(response => { setTimeout(() => { loadingInstance.close(); }, 300) return response; }, error => { setTimeout(() => { loadingInstance.close(); }, 300) let { response } = error; if (response) { //伺服器有返回內容 var errormsg = ''; switch (response.status) { case 400: errormsg = '錯誤請求' break; case 401: errormsg = '未登入,請重新登入' break; case 403: errormsg = '決絕訪問' break; case 404: errormsg = '請求錯誤,未找到該資源' break; case 405: errormsg = '請求方法未允許' break; case 408: errormsg = '請求超時' break; case 500: errormsg = '伺服器出錯' break; case 501: errormsg = '網路未實現' break; case 502: errormsg = '網路錯誤' break; case 503: errormsg = '服務不可用' break; case 504: errormsg = '網路超時' break; case 505: errormsg = 'http版本不支援該請求' break; default: errormsg = '連線錯誤' } Message({ type: 'warning', message: errormsg }); return false; } else { //伺服器連結果都沒有返回 有可能是斷網或者伺服器奔潰 if (!window.navigator.online) { //斷網處理 Message('網路中斷'); return; } else { //伺服器奔了 Message('伺服器奔了'); return Promise.reject(error); } } }) /* *get 方法,對應get請求 *@param {String} url [請求的url地址] *@param {Object} params[請求攜帶的引數]] */ export function get(url, params) { return new Promise((resolve, reject) => { axios.get(url, { params: params }).then(res => { resolve(res.data); }).catch(err => { reject(err.data); }) }); } /* *post 方法,對應post請求 *@param {String} url [請求的url地址] *@param {Object} params[請求攜帶的引數]] */ export function post(url, params) { return new Promise((resolve, reject) => { axios.post(url, params) .then(res => { resolve(res.data); }).catch(err => { reject(err.data); }) }); } /* *封裝patch請求 *@param url * @param params * @returns {Promise} */ export function patch(url, params) { return new Promise((resolve, reject) => { axios.patch(url, params) .then(res => { resolve(res.data); }, err => { reject(err); }) }) } /* *put 請求 *@param url * @param params */ export function put(url, params) { return new Promise((resolve, reject) => { axios.put(url, params) .then(res => { resolve(res.data); }, err => { reject(err); }) }) }
2.新建api資料夾,在api資料夾裡建立對應模組的js,寫介面呼叫的方法
import {post,get,put,patch} from '@/utils/request'
export const login = params =>post('/api/login',params)
3.在login.vue直接引入該方法就可以直接使用
import { login } from "@/api/login"; login(data).then(res=>{ })
4.也可以在main.js引入直接到掛載到原型prototype上
import { post, get, put, patch } from './utils/request' // 掛載到原型上 Vue.prototype.$post = post; Vue.prototype.$get = get;this.$post('/api/login',data).then(res=>{ console.log(res) })
在需要使用請求資料的地方直接使用就ok