美文网首页
开发中的axios

开发中的axios

作者: 竹杠敲头 | 来源:发表于2018-12-28 17:56 被阅读0次

[axios npm地址]https://www.npmjs.com/package/vue-axios

安装日常

npm install --save axios vue-axios
在main.js中

```import axios from 'axios'
```import VueAxios from 'vue-axios'
 
```Vue.use(VueAxios, axios)
-----------------------------------------------------------------
####一般情况下,我们未来开发方便会对axios进行再次封装,新建axios文件夹,在下面创建axiosConfig.js
import axios from 'axios';
import Message from ''
import QS from 'qs';     //axios安装时会自动安装,不需要重新安装

const instance = axios.create({
  baseURL: process.env.API_ROOT,
  timeout: 3000,
});
instance.defaults.withCredentials = true;
const pending = []; // 声明一个数组用于存储每个ajax请求的取消函数和ajax标识
const cancelToken = axios.CancelToken;
const removePending = (config) => {
  for (const p in pending) {
    if (pending[p].u === `${config.url}&${config.method}`) { // 当当前请求在数组中存在时执行函数体
      pending[p].f(); // 执行取消操作
      pending.splice(p, 1); // 把这条记录从数组中移除
    }
  }
};

// 添加请求拦截器
axios.interceptors.request.use((config) => {
  removePending(config); // 在一个ajax发送前执行一下取消操作
  config.cancelToken = new cancelToken((c) => {
    // 用接口名拼接请求方式进行标记
    pending.push({ u: `${config.url}&${config.method}`, f: c });
  });
  return config;
}, error => Promise.reject(error));

instance.interceptors.response.use(
  (res) => {
    let R = null;
    //每个项目后端返回的数据结构不同,这里根据不同情况处理不同
    if (res.status === 200) {
      const {
        data: {
          data: resData, success = false, errorCode = '', errorMsg = '',
        },
      } = res;
     //true时统一resolve,false时reject
      if (success) {
        R = resData;
        return Promise.resolve(R);
      }
      R = [errorCode, errorMsg];
      return Promise.reject(R);
    }
    return `error${res}`;
  },
  (error) => {
    Message.error({
      message: error.message || '接口出错',
    });
    if (error.response) {
      return Promise.reject(error.response.data);
    }
    return Promise.reject([-1, '未知错误']);
  },
);

export default {
  get(url, params) {
    return new Promise((resolve, reject) => {
      instance.get(url, { params })
        .then((res) => {
          resolve(res);
        })
        .catch((err) => {
          console.error(`GET请求url(${url})失败,错误如下:`);
          console.error(err);
          reject(err);
        });
    });
  },
  // 正常post请求
  post(url, params = {}) {
    return new Promise((resolve, reject) => {
      // console.debug('post params=',params);
      instance.post(url, QS.stringify({ ...params }))
        .then((res) => {
          resolve(res);
        })
        .catch((err) => {
          reject(err);
        });
    });
  },
  // 发送对象请求
  postJson(url, params) {
    return new Promise((resolve, reject) => {
      instance.post(url, params, { headers: { 'Content-Type': 'application/json' } })
        .then((res) => {
          resolve(res);
        })
        .catch((err) => {
          reject(err);
        });
    });
  },
  postFile(url, formData) {
    return new Promise((resolve, reject) => {
      instance.post(url, formData, {
        headers: {
          'Content-Type': 'multipart/form-data',
        },
      })
        .then((res) => {
          resolve(res);
        })
        .catch((err) => {
          console.error(`POST请求url(${url})失败,错误如下:`);
          console.error(err);
          reject(err);
        });
    });
  },
};

相关文章

  • vue中axios的封装

    axios的封装会在项目开发中减少代码的书写量: 安装axios npm install axios -D 封装a...

  • 开发中的axios

    [axios npm地址]https://www.npmjs.com/package/vue-axios 安装日常...

  • (二)axios的封装

    axios封装代码 在vue和react的开发过程中,经常需要对axios进行封装,现将项目中的axios保留,以...

  • 全局配置axios、axios 拦截器 和 proxy 跨域代理

    一、全局配置axios 1.为什么要全局配置axios 在实际项目开发中,几乎每个组件中都会用到axios发起数据...

  • ajax 请求

    Vue开发中解决跨域问题 Axios 配置请求拦截

  • vue axios 允许携带cookie 值

    在最近的项目开发中,使用 vue +axios ,前端需要向服务器发送cookie值。但是 axios发送请求默认...

  • node+axios下载外网文件到本地

    作为一个web前端开发,对axios肯定不陌生,但是在前端开发中,一般是使用axios来请求后端接口,获取数据。而...

  • axios全局使用

    vue中我们常用axios进行数据请求 axios模块在vue开发中如何使用引入,如何注册全局方法 一般情况下我们...

  • Vue 3.x 中全局配置 axios

    1、 为什么要全局配置 axios 在实际项目开发中,几乎每个组件中都会用到 axios 发起数据请求。此时会遇到...

  • vue全局使用axios的方法

    在vue项目开发中,我们使用axios进行ajax请求,很多人一开始使用axios的方式,会当成vue-resou...

网友评论

      本文标题:开发中的axios

      本文链接:https://www.haomeiwen.com/subject/aoeelqtx.html