不少種請求方式,重點仍是第一種吧ios
npm install axios --savenpm
下載完成axios
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); }))
有些時候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就是太多太麻煩post
而後咱們直接寫在組件裏的create(){}中,每次從新建立一個組件就調用axios,可是每一個組件都寫,又是太過於麻煩。動畫
這是個危險的行爲,若是有一天axios下架了那麼項目裏的的每一個地方都要改,工做量可想而知。url
那一天axios沒用了咱們就直接改咱們本身封裝的三方插件文件spa
建立一個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); })
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 結束!!!!!!!!!!!!!!!!!!!!!