axios封裝,使用攔截器統一處理接口


1、項目路徑下,引入axios、qs依賴

npm install axios

npm install qs

2、在項目的src路徑下新建一個commJs文件夾,在commJs文件夾里新建aps.js和request.js,api.js用於寫接口,對axios的封裝寫在request.js里

request.js

import axios from 'axios';
import QS from 'qs';

//自動切換環境
axios.defaults.baseURL = process.env._BASEURL
//設置超時時間
axios.defaults.timeout = 10000;
// post請求頭
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8'
axios.defaults.withcredentials = true

//請求攔截(請求發出前處理請求)
axios.interceptors.request.use((config) => {
    //在發送請求之前如果為post序列化請求參數
    if (config.method === 'post') {
      config.data = config.data;
    }
    return config;
  }, (error) => {
    return Promise.reject(error);
  });

// 響應攔截器(處理響應數據)
axios.interceptors.response.use((res) => {
    //對響應數據做判斷,與后台協議統一接口返回格式
    console.log('>>>>>>>response: ', res);
    if (res.data.succ != 'ok') { //這個判斷可根據實際情況修改
      return Promise.reject(res);
    }
    return res;
  }, (error) => {
    return Promise.reject(error);
  });

// 封裝get方法
function get(url, params){
    return new Promise((resolve, reject) =>{
        axios.get(url, params).then(res =>{
            resolve(res.data);
        }).catch(err =>{
            reject(err.data);
        })
    });
}

// 封裝post方法
function post(url, params){
    return new Promise((resolve, reject) =>{
        axios.post(url, params).then(res =>{
            resolve(res.data);
        }).catch(err =>{
            reject(err.data);
        })
    });
}

//對外接口
export function request({method, url, data}){
    if(method == 'get'){
        return get(url, data);
    }else if(method == 'post'){
        return post(url, data);
    }
}

export default {
    install(Vue) {
    Vue.prototype.$axios = axios;
    Vue.prototype.$request = function () {
            return request;
        }
    }
}

api.js

import {
  request
} from './request'

// 列表查詢接口
export const getList = (parmas) => {
  return request({
    url: 'xxx/xxx/xxx',
    method: 'post',
    data: parmas
  })
}

 3、在具體組件調用

//index.vue
import { getList } from "../../comm/js/api.js";
export default {
 methods: {
    getPage() {
      var param = {
        currentUser: '',
        currentPage: "1",
        pageSize: "10"
      };
      getList(param).then(res => {
        if (!res.result.list) {
          this.list = [];
        } else {
          this.list = res.result.list;
        }
      });
 }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM