1. 程式人生 > 實用技巧 >封裝axios庫

封裝axios庫

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;

在需要使用請求資料的地方直接使用就ok
  this.$post('/api/login',data).then(res=>{ console.log(res) })