vue接口封装

该博客介绍了如何使用 Axios 进行请求和响应的拦截处理,包括请求标记避免重复请求,以及针对不同错误状态的响应处理。此外,还展示了如何封装 Axios 实例,提供 get、post、put 和 delete 等常用 HTTP 请求方法,并添加了身份验证信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

axios封装

请求拦截:请求标记已经存在,则取消本次请求,否则在请求列表中加入请求标记
响应拦截:code==500,统一报错;不同error,不同处理报错

//  axios.js
import axios from "axios"
import { Message } from 'gdb-ui';

let requestList = [];
let cancelToken = axios.CancelToken;

// 请求拦截
axios.interceptors.request.use(
  (config) => {
    config.cancelToken = new cancelToken((cancel) => {
      let requestFlag = JSON.stringify(config.url) + JSON.stringify(config.data) + '&' + config.method;
      //请求标记已经存在,则取消本次请求,否则在请求列表中加入请求标记
      if (requestList.includes(requestFlag)) {
          //取消本次请求
          cancel();
      } else {
          requestList.push(requestFlag);
      }
    });
    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)

// 响应拦截
axios.interceptors.response.use(
  (response) => {
    let requestFlag = JSON.stringify(response.config.url) + JSON.stringify(response.config.data) + '&' + response.config.method;
    requestList.splice(requestList.findIndex(item => item === requestFlag), 1);

    if (response.data.code === 500) {
      // dialog.message({
      //   text: response.data.msg,
      // })
      Message({
        message: response.data.msg,
        type: 'error',
        showClose: true
      })
    }
    return response
  },
  (error) => {
    requestList.length = 0;
    // 请求失败
    if (error && error.response) {
      switch (error.response.status) {
        case 400:
          // 对400错误您的处理\
          break
        case 401:
          if (error.response.config.isTarget) location.href = "/login.html"
          break
        case 404:
          Promise.reject(error)
          break
        default:
          // 如果以上都不是的处理
          return Promise.reject(error)
      }
    }
  }
)

http

封装请求方式

import axios from 'axios';
import { getCookie } from '@/assets/js/utils/cookie';
// import cookieKey from '@/assets/js/config/cookie-key';

var zuulToken = "Z2RiOnp1dWw6MTIzNDU2";
var token = getCookie('pangu_token');

export default {
    /**
     * get 请求
     * @param url 接口路由
     * @param auth 是否需要带登录信息
     * @returns {AxiosPromise<any>}
     * (Your back-end user authenticates information )
     *      ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
     *  后端用户验证信息比如(token)   
     */
    get({ url, data = {}, isTarget = true, responseType }) {
        return axios.get(url, { headers: { Authorization: token, ZuulToken: zuulToken }, params: data, isTarget: isTarget, responseType });
    },

    /**
     * post 请求
     *
     * @param url 接口路由
     * @param data 接口参数
     * @param auth 是否需要带登录信息
     * @returns {AxiosPromise<any>}
     * 
     */
    post({ url, data, responseType }) {
        return axios.post(url, data, { headers: { Authorization: token, ZuulToken: zuulToken }, responseType });
    },

    /**
     * put请求
     * @param url 接口路由
     * @param data 接口参数
     * @param auth 是否需要带登录信息
     * @returns {AxiosPromise<any>}
     */
    put({ url, data }) {
        return axios.put(url, data, { headers: { Authorization: token, ZuulToken: zuulToken } });
    },

    /**
     * 删除
     * @param url 接口路由
     * @param auth 是否需要带登录信息
     * @returns {AxiosPromise}
     */
    del({ url }) {
        return axios.delete(url, { headers: { Authorization: token, ZuulToken: zuulToken } });
    },

    /**
     * 上传文件
     * @param url 接口路由
     * @param file 接口文件
     * @param auth 是否需要带登录信息
     */
    uploader({ url, file }) {
        let param = new FormData();
        param.append('file', file)
        return axios.post(url, param, { headers: { Authorization: 'Your back-end user authenticates information' } })
    }
};

api

接口

export default {
  // 账号登录
  login: "/api/user_service/user/login",
  // 短信验证码登录
  loginvCode: "/api/user_service/user/login_vCode",
  // 发送短信验证码
  sendLoginCode: "/api/user_service/sms/login_code",
  // 生成验证码图片 1:注册 2:登录 3:忘记密码
  getVerify: "/api/user_service/verify/getVerify/",
  // 获取商品详情
  getGoods: "/api/goods_service/goods/detail/"
}

这个错误是由于无法连接到本地主机的10248端口导致的。这个端口通常是kubelet进程监听的端口,用于健康检查。出现这个错误可能是由于kubelet进程没有正确启动或者配置错误导致的。 解决这个问题的方法是检查kubelet进程的状态和配置。你可以按照以下步骤进行操作: 1. 检查kubelet进程是否正在运行。你可以使用以下命令检查kubelet进程的状态: ```shell systemctl status kubelet ``` 如果kubelet进程没有运行,你可以使用以下命令启动它: ```shell systemctl start kubelet ``` 2. 检查kubelet的配置文件。你可以使用以下命令查看kubelet的配置文件路径: ```shell kubelet --kubeconfig /etc/kubernetes/kubelet.conf --config /var/lib/kubelet/config.yaml --bootstrap-kubeconfig /etc/kubernetes/bootstrap-kubelet.conf config view ``` 确保配置文件中的端口号和地址正确,并且与你的环境相匹配。 3. 检查网络连接。你可以使用以下命令检查是否可以连接到localhost10248端口: ```shell curl -sSL http://localhost:10248/healthz ``` 如果无法连接,请确保端口没有被防火墙或其他网络配置阻止。 4. 检查docker的配置。有时候,kubelet进程依赖于docker进程。你可以按照以下步骤检查docker的配置: - 创建/etc/docker目录: ```shell sudo mkdir /etc/docker ``` - 编辑/etc/docker/daemon.json文件,并添加以下内容: ```json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ], "registry-mirrors": ["https://tdhp06eh.mirror.aliyuncs.com"] } ``` - 重启docker进程: ```shell systemctl restart docker ``` 请注意,以上步骤是一种常见的解决方法,但具体解决方法可能因环境而异。如果以上步骤无法解决问题,请提供更多的错误信息和环境配置,以便我们能够更好地帮助你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值