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

创建HTTP客户端实例报错:Cannot read properties of undefined (reading 'create')

报错原因及修复方案

核心原因

报错Cannot read properties of undefined (reading 'create')本质是axios.default为undefined,导致无法调用create方法,主要由以下问题引发:

  1. 导入方式与模块环境不匹配
    代码混用了CommonJS的require导入和ES模块的export default导出。在ES模块环境中(比如用Vite、Webpack构建或浏览器原生ES模块),用require导入axios时,默认导出会被放在axios.default下,但正确的做法应该是用import导入;如果是CommonJS环境(比如Node.js),axios本身就是直接导出的对象,不需要访问.default。

  2. 冗余的window.localStorage调用
    代码中localStorage.getItem("Authorization") || window.localStorage.getItem("Authorization")是冗余的——localStorage本身就是window的属性,在已经判断typeof window !== 'undefined'的前提下,直接用localStorage.getItem即可,不过这不是导致当前报错的直接原因。

修复方案

方案1:改用ES模块导入(推荐)

将require替换为import,并去掉.default:

import axios from 'axios';

let access_token = typeof window !== 'undefined' ? localStorage.getItem("Authorization") : null;
let token = JSON.parse(access_token)?.token;

const axiosFetch = axios.create({
  baseURL: "http://localhost:5000",
  headers: {
    Authorization: `Bearer ${token || ''}`,
  }
});

export default axiosFetch;

方案2:保留require但去掉.default

如果项目是CommonJS环境,直接使用axios.create即可:

const axios = require("axios");

let access_token = typeof window !== 'undefined' ? localStorage.getItem("Authorization") : null;
let token = JSON.parse(access_token)?.token;

const axiosFetch = axios.create({
  baseURL: "http://localhost:5000",
  headers: {
    Authorization: `Bearer ${token || ''}`,
  }
});

module.exports = axiosFetch;

额外优化建议

  • 给token设置默认空字符串,避免出现Bearer undefined的无效请求头;
  • 如果是SSR(服务端渲染)环境,建议在请求拦截器中动态获取令牌,而不是实例创建时一次性获取——因为服务端不存在localStorage,会导致令牌始终为null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 12:42:18