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;
}