Vue-axios 封裝了一手好axios:)


請求方式

 

 

 很多種請求方式,重點還是第一種吧

下載

npm install axios --save

下載完成

直接導入

import axios from 'axios'

簡單配置

axios({
  url: 'http://'
}).then(res => {
  console.log(res);
})

並合請求

//並和請求
axios.all([
  axios({
    url: "http://123.207.32.32:8000/home/multidata"
  }),
  axios({
    url: 'http://123.207.32.32:8000/home/multidata',
    method: 'get',
    params: {
      type: 'pop',
      page: 3

    }
  })
  // 就是對象的解構
]).then(axios.spread((res1, res2) => {
  console.log(res1);
  console.log(res2);
}))

全局配置

axios.defaults.baseURL = "http://123.207.32.32:8000" 地址
axios.defaults.timeout = 5000  超時時間

請求配置

axios.all([
  axios({
    url: "/home/multidata"
  }),
  axios({
    url: '/home/multidata',
    method: 'get',
    params: {
      type: 'pop',
      page: 3

    }
  })
  // 就是對象的解構
]).then(axios.spread((res1, res2) => {
  console.log(res1);
  console.log(res2);
}))

常見的配置選項

 

 

get 傳 params

post 傳 data

 

 

 axios 實例

解釋

有些時候url地址的ip可能會不同

那么就會出現多個baseURL和多個axios

這個時候就是創axios實例,不同的實例就可以配置不同的url 使用不同的 axios

// 創造axios實例instance1
const instance1 = axios.create({
  baseURL: 'http://123.207.32.32:8000',
  timeout: 5000
})
// 然后就可以使用這個實例axios(instance1)進行使用
instance1({
  url: "/home/multidata"
}).then(res => {
  console.log(res);
})

// 創造axios實例instance1
const instance2 = axios.create({
  baseURL: 'http://123.207.32.32:8000',
  timeout: 5000
})
// 然后就可以使用這個實例axios(instance2)進行使用
instance2({
  url: '/home/multidata',
  method: 'get',
  params: {
    type: 'pop',
    page: 3
  }
}).then(res => {
  console.log(res);
})

這樣寫在main.js就是太多太麻煩

然后我們直接寫在組件里的create(){}中,每次重新創建一個組件就調用axios,但是每個組件都寫,又是太過於麻煩。

這是個危險的行為,如果有一天axios下架了那么項目里的的每個地方都要改,工作量可想而知。

於是我們有思路:

 

那一天axios沒用了我們就直接改我們自己封裝的三方插件文件

第一種:

 

 創建一個request.js文件

import axios from 'axios'

export function request(config, success, failure) {
    //1。創建axiso的實例
    const instance = axios.create({
        baseURL: 'http://123.207.32.32:8000',
        timeout: 5000
    })

    //發送真正的網絡請求
    instance(config)
        .then(res => {
            // console.log(res);
            success(res)
        })
        .catch(err => {
            // console.log(err);
            failure(err)
        })
}

在main.js文件里

// 5.封裝request模塊
import { request } from './network/request.js'

request({
  url: "/home/multidata"
}, res => {
  console.log(res);
}, err => {
  console.log(err);
})

這個封裝還是有些問題,我們可以不用三個參數嗎?直接用一個對象包三個變量就行,我們繼續改進

第二種:

export function request(config) {
    //1。創建axiso的實例
    const instance = axios.create({
        baseURL: 'http://123.207.32.32:8000',
        timeout: 5000
    })
    //發送真正的網絡請求
    instance(config.baseConfig)
        .then(res => {
            // console.log(res);
            config.success(res)
        })
        .catch(err => {
            // console.log(err);
            config.failure(err)
        })
}
request({
  baseConfig: {
    url: "/home/multidata"
  },
  success: res => {
    console.log(res);
  },
  failure: err => {
    console.log(err);
  }
})

第三種

因為是請求函數所以我們直接Promise

export function request(config) {
    return new Promise((resolve, reject) => {
        //1。創建axiso的實例
        const instance = axios.create({
            baseURL: 'http://123.207.32.32:8000',
            timeout: 5000
        })

        //發送真正的網絡請求
        instance(config)
            .then(res => {
                resolve(res)
            })
            .catch(err => {
                reject(err)
            })
    })

}
request({
  url: "home/multidata",
}).then(res => {
  console.log(res);
}).catch(err => {
  console.log(err);
})

第四種 終極方案

因為 instance就是axios本身就是一個Promise所以直接return

export function request(config) {
    //1。創建axiso的實例
    const instance = axios.create({
        baseURL: 'http://123.207.32.32:8000',
        timeout: 5000
    })
    //發送真正的網絡請求
    return instance(config)
}
request({
  url: "home/multidata",
}).then(res => {
  console.log(res);
}).catch(err => {
  console.log(err);
})

axios攔截器

請求攔截:

instance.interceptors.request.use(config => {
        console.log(config);
        // 1.config中的一些信息不符合服務器的要求
        // 2.每次請求時顯示動畫 請求成功隱藏
        // 3.當登陸時,如果沒有攜帶token就攔截請求,提示去登錄
        return config
    })

頁面打印:

 

所以攔截了一定要return攔截內容

響應攔截

instance.interceptors.response.use(res => {
        console.log(res);
    }, err => {
        console.log(err);
    })

頁面打印

 

 

 所以也一定要return

axios 結束!!!!!!!!!!!!!!!!!!!!!


免責聲明!

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



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