vue之axios

axios(url[, config])
爲方便起見,爲全部支持的請求方法提供了別名
axios.request(config)
axios.get(url[, config])
axios.delete(url[, config])
axios.head(url[, config])
axios.post(url[, data[, config]])
axios.put(url[, data[, config]])
axios.patch(url[, data[, config]])
在使用別名方法時,url、method、data這些屬性都沒必要在配置中指定ios

處理併發請求的助手函數json

axios.all(iterable)
axios.spread(callback)
function getUserAccount() {
  return axios.get('/user/12345');
}

function getUserPermissions() {
  return axios.get('/user/12345/permissions');
}

axios.all([getUserAccount(), getUserPermissions()])
  .then(axios.spread(function (acct, perms) {
    // 兩個請求如今都執行完成
  }));

可使用自定義配置新建一個 axios 實例axios

axios.create([config])
var instance = axios.create({
  baseURL: 'https://some-domain.com/api/',
  timeout: 1000,
  headers: {'X-Custom-Header': 'foobar'}
});

請求響應api

{
  // `data` 由服務器提供的響應
  data: {},

  // `status` 來自服務器響應的 HTTP 狀態碼
  status: 200,

  // `statusText` 來自服務器響應的 HTTP 狀態信息
  statusText: 'OK',

  // `headers` 服務器響應的頭
  headers: {},

  // `config` 是爲請求提供的配置信息
  config: {}
}

全局的 axios 默認值promise

axios.defaults.baseURL = 'https://api.example.com';
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

在請求或響應被 then 或 catch 處理前攔截它們。服務器

// 添加請求攔截器
axios.interceptors.request.use(function (config) {
    // 在發送請求以前作些什麼
    return config;
  }, function (error) {
    // 對請求錯誤作些什麼
    return Promise.reject(error);
  });

// 添加響應攔截器
axios.interceptors.response.use(function (response) {
    // 對響應數據作點什麼
    return response;
  }, function (error) {
    // 對響應錯誤作點什麼
    return Promise.reject(error);
  });

使用 cancel token 取消請求併發

var CancelToken = axios.CancelToken;
var source = CancelToken.source();
axios.get('/user/12345', {
  cancelToken: source.token
}).catch(function(thrown) {
  if (axios.isCancel(thrown)) {
    console.log('Request canceled', thrown.message);
  } else {
    // 處理錯誤
  }
});

// 取消請求(message 參數是可選的)
source.cancel('Operation canceled by the user.');

應用實例一:app

$req(method, url, params) {
    const promise = new Promise((resolve,reject) =>{
    const headers = {}
    const noData = (method === 'get' || method === 'delete')
    axios[method](url, (noData ? {headers, params} : params), (noData ? '' :{headers})).then(resp => {
      if (resp.status === 200) {
        if (resp.data.code === 0) {
          resp.data = resp.data || {}
          resolve(resp.data)
        }else {
          console.log(resp.data.msg)
        }
      } else {
        reject(resp)
      }
    }).catch((err) => {
      if (err == 'Error: Network Error') {
        console.log('請求超時,請稍後再試')
      } else {
        console.log('請求失敗')
      }
      reject(err)
    })
  })
  return promise
},

$get(url, params) {
  if (params) {
    let arr = []
    for (let p in params) {
      if (params[p] || params[p] === 0) {
        arr.push(`${p}=${params[p]}`)
      }
    }
    url = `${url}?${arr.join('&')}`
  }
  return this.$req('get', url)
},

$put(url, params) {
  return this.$req('put', url, params)
},

$post(url, params) {
  return this.$req('post', url, params)
},

$del(url, params) {
  if (params) {
    let arr = []
    for (let p in params) {
      if (params[p] || params[p] === 0) {
        arr.push(`${p}=${params[p]}`)
      }
    }
    url = `${url}?${arr.join('&')}`
  }
  return this.$req('delete', url)
}

應用實例二:dom

import axios from 'axios'
const BaseURL = 'xxxxxxxxxxxx'

export default function $http(opts) {
  let {
    url,
    method,
    headers,
    data,
    params,
    responseType='json',
    timeout=30000
  } = opts;

  let Instance = axios.create({
    baseURL: BaseURL,
    withCredentials: false
  })

  //請求返回數據攔截
  Instance.interceptors.response.use(function (response) {
    // 對響應數據作點什麼
    if (response.status == 200 && response.data) {
      if (response.data.code == 0) {
        return response.data.data;
      } else {
        return Promise.reject(response.data.msg);
      }
    } else {
      return Promise.reject(response)
    }
  }, function (error) {
    return Promise.reject(error)
  })
  let promise = Instance.request({
    url,
    method,
    headers,
    data,
    responseType,
    params,
    timeout
  })
  return promise;
}