vue3中 axios 发送请求 刷新token 封装axios

service.js 页面

javascript 复制代码
import axios from 'axios'
// 创建axios实例
const instance = axios.create({
  baseURL: 'http://gcm-test.jhzhkj.cn:8600/h5card/',
  timeout: 5000, // 请求超时时间
  headers: {
    get: {
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    post: {
      'Content-Type': 'application/json',
    }
  }
});

 
// 请求拦截器
instance.interceptors.request.use(
  config => {
    // 可以在这里添加请求头等信息
    // config.headers['accesstoken'] = localStorage.getItem('accesstoken');
     const token = localStorage.getItem('accesstoken');
     const userId = 'clientId_pj9A9xEt8Y2YaEyQ9eEx';

     if (token) {
       config.headers.accesstoken = `${token}`;
       config.headers.userId = `${userId}`;
     }
    return config;
  },
  error => {
    // 请求错误处理
    console.log('请求错误处理',error); // for debug
    return Promise.reject(error);
  }
);
 
// 响应拦截器
instance.interceptors.response.use(
  response => {
    //  if ( response.msg == '登录已失效,请退出重新登录!') {
  //  console.log('失败失败',response)
  // }
    const res = response.data;
    // 如果返回的状态码为200,说明成功,可以直接返回数据
    if (res.code === 200) {
      return res;
    } else {
      console.log(res,'响应拦截器 接口返回的错误数据')
      if(res.code == 500){
      alert('请稍后再试')
      }
      // 其他状态码都当作错误处理
      // 可以在这里对不同的错误码进行不同处理
      return Promise.reject({
        message: res.msg || 'Error',
        status: res.code
      });
    }
  },
  async error => {
    // ‌originalRequest._retry‌ 在axios中表示一个布尔值,用于控制请求的重试机制。当_retry设置为true时,表示当前请求将被重试。
    const originalRequest = error.config;
    // token过期 重新刷新Token
    if (error.response.data.code === 401 && !originalRequest._retry) {
      originalRequest._retry = true;
      try{
        let paramsData = {
          clientId: "c2YaEyEx", //ID
          clientSecret: "bb92aN9w", //秘钥
        };
        const res = await instance.post('/client/getToken', paramsData);
        const accesstoken = res.data.accesstoken;
        localStorage.setItem('accesstoken', accesstoken);
        instance.defaults.headers.common['accesstoken'] = `${accesstoken}`;
        return instance(originalRequest);

      }catch(refreshError){
        return Promise.reject(refreshError);
      }
    }
    // 对响应错误做处理
    // console.log('对响应错误做处理err' + error); // for debug
    return Promise.reject(error);
  }
);
 
export const httpPost = (url, data = {}) => {
  return new Promise((resolve, reject) => {
    instance({
      url,
      data,
      method: 'post'
    }).then((response) => {
      if (response && response.code === 200) {
        resolve(response)
      } else {
       
        alert(response.msg)
        reject(response && response.msg)
      }
    })
  })
}

export const httpGet = (url, params = {}) => {
  return new Promise((resolve, reject) => {
    instance({
      url,
      params,
      method: 'get'
    }).then((response) => {
      if (response && response.code === 200) {
        resolve(response.data)
      } else {
       
        alert(response.msg)
        reject(response && response.msg)
      }
    })
  })
}

api/common.js页面

javascript 复制代码
import { httpPost,httpGet } from '@/utils/service';
// 获取token
export function getToken(params) {
  return httpPost('/client/getToken',params);
}

vue文件里应用

javascript 复制代码
import { getToken } from "@/api/common";


const getHome = () => {
  let paramsData = {
    clientId: "8Y9eEx",  
  };
  getToken(paramsData).then((res) => {
    if (res.code == 200) {
      if (res && res.data.accesstoken) {
        localStorage.setItem("accesstoken", res.data.accesstoken);
      }
    }
  });
};
相关推荐
geovindu17 分钟前
go: Strategy Pattern
开发语言·设计模式·golang·策略模式
276695829220 分钟前
阿里最新acw_sc__v2 分析
开发语言·python·acw_sc__v2·acw_sc__v2逆向·acw_sc__v2算法·acw_sc__v2算法分析·cookie逆向
dog25023 分钟前
圆锥曲线和二次曲线
开发语言·网络·人工智能·算法·php
AI人工智能+电脑小能手30 分钟前
【大白话说Java面试题】【Java基础篇】第25题:JDK1.8的新特性有哪些
java·开发语言·后端·面试
Daybreak34 分钟前
Mobile 端 AI 请求真机调试:从"线上没日志"到四层问题定位
前端
开发小程序的之朴1 小时前
基于Go语言的企业级CMS系统架构设计与性能分析——以AnQiCMS为例
开发语言·golang·系统架构
Wect1 小时前
LeetCode 97. 交错字符串:动态规划详解
前端·算法·typescript
木斯佳1 小时前
前端八股文面经大全:字节暑期前端一面(2026-04-24)·面经深度解析
前端
凯瑟琳.奥古斯特1 小时前
Redis是什么及核心特性
前端·css·redis·缓存
架构源启1 小时前
OpenClaw 只能手动写脚本?我用 Chrome 插件实现了“录制即生成“
前端·人工智能·chrome·自动化