You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Axios报cancelToken未定义错误的原因与修复方法

问题原因

你遇到的TypeError: Cannot read properties of undefined (reading 'cancelToken')错误,根源是写的Axios请求拦截器没有返回处理后的请求配置对象。
Axios的请求拦截器有明确约定:传入的成功回调函数必须返回请求配置(config),否则拦截器执行完成后,后续的请求发送逻辑拿不到完整的配置参数,就会在读取配置上的cancelToken属性时抛出异常。这个问题和本地是否存储鉴权token无关——不管localStorage里有没有profile字段,你写的拦截器回调都没有写返回值,默认返回undefined,所有经过这个Axios实例的请求都会触发报错。
你之前尝试的CancelToken修复方案,本身逻辑是主动取消重复请求,会直接终止所有请求流程,自然会返回"Cancel repeated request"的取消提示,完全不适配当前场景。

正确修复代码

修改请求封装文件index.js里的拦截器逻辑,补全返回值即可,建议同时加headers的兜底判断避免边界问题:

import axios from 'axios';

const API = axios.create({
    baseURL: 'http://localhost:3500'
})

API.interceptors.request.use((req) => {
    // 兜底处理headers不存在的边界情况
    req.headers = req.headers || {};
    const profileStr = localStorage.getItem('profile');
    if (profileStr) {
        const profile = JSON.parse(profileStr);
        req.headers.Authorization = `Bearer ${profile.token}`
    }
    // *必须返回处理后的请求配置!
    return req;
})

// 下方接口封装逻辑不需要改动
export const fetchHunts = () => API.get('/hunts');
export const createHunt = (newHunt) => API.post('/hunts', newHunt);
export const updateHunt = (id, updatedHunt) => API.patch(`/hunts/${id}`, updatedHunt);
export const deleteHunt = (id) => API.delete(`/hunts/${id}`);
export const signInAdmin = (formData) => API.post('/admins/signinadmin', formData);
export const signUpAdmin = (formData) => API.post('/admins/signupadmin', formData);
验证说明

修改完成后逻辑符合预期:

  • 未登录状态下,拦截器会直接返回原始请求配置,登录、注册接口可以正常发送
  • 登录状态下,拦截器会自动给请求头加上Authorization鉴权字段,后端校验中间件可以正常读取token

内容的提问来源于stack exchange,提问作者user15018969

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 19:03:29