封裝axios

1.什麼是axios

    Axios 是一個基於 promise 的 HTTP 庫,可以用在瀏覽器和 node.js 中。

    特點:

  • 從瀏覽器中創建 XMLHttpRequests
  • 從 node.js 創建 http 請求
  • 支持 Promise API
  • 攔截請求和響應
  • 轉換請求數據和響應數據
  • 取消請求
  • 自動轉換 JSON 數據
  • 客戶端支持防禦 XSRF

在項目過程中,會頻繁的使用調取接口,爲了避免重複代碼,快速編寫接口,對axios進行封裝

進行封裝axios-1

//引入axios,qs
import axios from 'axios'
import qs from 'qs'

//設置axios的默認地址
axios.defaults.baseURL = 'http://127.0.0.1:8888'


//進行攔截
axios.interceptors.request.use(function (config) {
   const token =  localStorage.getItem('token')
    // 在發送請求之前做些什麼,例如加入token , 添加請求頭    
    //除了登錄界面,全部帶上請求頭
    config.headers.Authorization = `Bearer ${token}`   
    return config;
}, function (error) {
    // 對請求錯誤做些什麼
    return Promise.reject(error);
});

axios.interceptors.response.use(function (response) {
    // 在接收響應做些什麼,例如跳轉到登錄頁
    let { code, msg } = response.data;
    //當有code的時候進行消息提示
    if (code != undefined) {
        if (code === 1) {
            //彈出提示,刪除成功
            Message({
                message: msg,
                type: "success"
            });
        }
        if (code === 0) {
            Message.error(msg)
        }
    }
    return response;
}, function (error) {
    // 對響應錯誤做點什麼
    return Promise.reject(error);
});


//進行封裝axios並暴露
export default {
    get(url, params) {
        return new Promise((resolve, reject) => {
            axios.get(url, { params })
                .then(res => resolve(res.data))
                .catch(err => reject(err))
        })
    },
    post(url, params) {
        return new Promise((resolve, reject) => {
            axios.post(url, qs.stringify(params))
                .then(res => resolve(res.data))
                .catch(err => reject(err))
        })
    },
}

進行封裝axios-2

import axios from 'axios'
import qs from 'qs'

//默認地址
axios.defaults.baseURL = 'http://127.0.0.1:3333'

//請求攔截器
axios.interceptors.request.use((req)=>{
    const token = '13';
    if(token){
        //token爲後端定義字段
        axios.defaults.token = token
    }

    // 處理post
    if(req.method == 'post'){
        //後端如果是加上了cotent-type字段,則不需要處理
        req.data = qs.stringify(req.data)
    }
    
   //返給後臺
    return req
},(err)=>Promise.reject(error));


//響應攔截器
axios.interceptors.response.use((res)=>{
    //對返回狀態進行處理
    switch (res.status) {
        case 400:
            break;
        case 500:
            break;
        default:
            break;
    }     
    //返回前端
    return res.data.data
},(err)=>Promise.reject(error));

 

進行接口封裝

import request from '@/utils/request.js' //引入封裝的axios

//暴露接口

//登錄接口
export const loginAccount = params => request.get('/login',params);

 

發佈了55 篇原創文章 · 獲贊 12 · 訪問量 4252
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章