已创建带请求拦截器的axios实例:自动携带token、防重复请求、统一错误处理及401跳登录,导出为默认request对象供全局使用。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要用通义灵码快速生成一个带请求拦截器的Axios网络请求配置,避免每次手动写重复逻辑,比如自动携带token、统一处理错误、添加loading状态。
初始化Axios实例并配置基础参数
打开项目src/utils/request.js(若不存在则新建),输入以下代码创建axios实例:
import axios from 'axios';
const request = axios.create({
baseURL: import.meta.env.VUE_APP_BASE_API || '/api',
timeout: 10000,
headers: { 'Content-Type': 'application/json' }
});
这一步必须先定义实例,否则拦截器无法挂载;【baseURL必须根据你项目的环境变量或实际接口前缀调整,写错会导致所有请求404】。
编写请求拦截器:自动注入Token和取消重复请求
在request实例下方紧接着添加:
let pendingRequests = new Map();
const generateRequestKey = (config) => {
return `${config.url}_${config.method}_${JSON.stringify(config.params)}_${JSON.stringify(config.data)}`;
};
request.interceptors.request.use(
config => {
const token = localStorage.getItem('token');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
const key = generateRequestKey(config);
if (pendingRequests.has(key)) {
pendingRequests.get(key).cancel('重复请求被取消');
} else {
pendingRequests.set(key, { cancel: axios.CancelToken.source().token });
}
return config;
},
error => Promise.reject(error)
);
通义灵码 Linux版是阿里云推出的一款AI智能编码助手,专为Linux开发者设计。它支持在Linux操作系统下的JetBrains IDEs、Visual Studio Code等主流集成开发环境中运行。该工具基于通义大模型,提供代码智能生成、实时续写、单元测试生成、代码优化以及研发智能问答等功能,旨在帮助Linux用户在编码过程中提升效率。
注意:cancel方法依赖axios.CancelToken,V1.5+版本已废弃,若你用的是axios 1.6+,请改用AbortController——但通义灵码默认生成的是旧写法,【务必检查node_modules/axios/package.json中的版本号,≥1.6时需手动替换为AbortController逻辑】。
编写响应拦截器:统一错误处理与业务状态码解析
继续在文件末尾追加:
request.interceptors.response.use(
response => {
if (response.data?.code === 200) {
return response.data;
}
throw new Error(response.data?.message || '请求失败');
},
error => {
if (error.response?.status === 401) {
localStorage.removeItem('token');
window.location.href = '/login';
}
return Promise.reject(error);
}
);
这一步把200业务成功态的数据直接透出,省去每个接口再解一层data;非200业务码抛出Error,让调用方用catch捕获;401自动清token跳登录页——这是大多数后台系统的标准流程。
导出封装好的request供页面调用
在文件最底部添加一行导出语句:
export default request;
现在任意.vue或.ts文件里只需import request from '@/utils/request',就能直接发起带拦截逻辑的请求,比如request.get('/user/info')。










