关于Vue项目中对axios进行二次封装

封装axios函数功能:

1、复用请求地址:公共请求地址就不用重复定义。

2、自动携带公共的请求参数。

3、函数调用返回的promise对象内部的结果值

        如果是成功对象,直接得到data数据

        如果是失败状态,直接得到失败原因

项目中常用场景:可以统一处理错误请求,请求头自动携带token、处理返回的响应数据、设置进度条等,代码如下:

import axios from "axios";
import NProgress from "nprogress";
import "nprogress/nprogress.css";
import getUserTempId from "./getUserTempId";
import store from "@/store";

// axios.create方法的返回值,简单理解axios的实例,功能和axios基本一致
const request = axios.create({
  // 请求基础路径,所有通过request发送请求,请求地址前面都会自动加上baseURL
  baseURL: "/api",
  // 请求的超时时间,超过时间请求会自动中断,请求失败
  timeout: 20000,
  // 公共请求头(固定写死)
  // headers: {},
});

/*
  请求拦截器: 在发送请求之前触发的函数
  响应拦截器:在响应回来的时候触发的函数

  触发流程:
   request({ method: 'xx', url: 'xxx' })
    .then()
    .catch()

    请求拦截器的回调
      一般只会触发成功的回调
    发送请求
    响应拦截器的回调
      看响应状态码
        2xx触发成功的回调函数
        非2xx触发失败的回调函数
    then/catch/的回调 / async await
*/

// 请求拦截器
request.interceptors.request.use(
  // 成功的回调函数
  (config) => {
    // config请求的配置对象
    NProgress.start();
    // 给config添加公共参数(动态的)
    config.headers.userTempId = getUserTempId();
    // this.$store.state.xxx
    const token = store.state.user.token;
    if (token) {
      config.headers.token = token;
    }

    // 必须返回config对象
    // 返回的config对象,就会在下一步发送请求用上
    return config;
  }
  // 失败的回调函数
  // () => {}
);
// 响应拦截器
request.interceptors.response.use(
  // 成功的回调函数
  (response) => {
    // 请求成功 2xx
    NProgress.done();
    // 功能可能是失败
    if (response.data.code === 200) {
      // 功能成功
      return response.data.data;
    } else {
      // 功能失败
      return Promise.reject(response.data.message || "未知错误,请联系网管");
    }
  },
  // 失败的回调函数
  (error) => {
    NProgress.done();
    console.dir(error);
    // 请求失败
    return Promise.reject(error.message);
  }
);

export default request;

最后api里直接引入封装好的request即可

// 登录
export const reqLogin = (phone, password) => {
  return request({
    method: "POST",
    url: `/user/login`,
    data: {
      phone,
      password,
    },
  });
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值