在Express+Firebase应用中调用Axios.post时报Cannot read properties of undefined错误
问题原因
你遇到的TypeError: Cannot read properties of undefined (reading 'post'),核心是TypeScript模块编译配置与Axios的CommonJS导出结构不匹配:
- 你的TS代码用了默认导入
import axios from "axios",但未开启esModuleInterop时,TS会将其编译为axios_1.default.post。 - 而Axios的CommonJS模块是直接导出核心实例(
module.exports = axios),不存在default属性,导致axios_1.default为undefined,调用.post时触发错误。
解决方案
有两种可行的修复方式:
方案1:开启TypeScript的esModuleInterop选项
在tsconfig.json的compilerOptions中添加或修改配置:
{ "compilerOptions": { "esModuleInterop": true, "allowSyntheticDefaultImports": true } }
该选项会让TS自动适配CommonJS模块的导出结构,编译后能正确识别Axios实例,无需修改业务代码。
方案2:调整Axios导入方式
如果不想修改TS配置,可将导入改为命名空间导入,直接使用命名空间下的方法:
import * as axios from "axios"; // 调用时直接用axios.post,无需.default const tokenExchangeResult = await axios.post( "https://accounts.spotify.com/api/token", querystring.stringify(urlEncodedData), { headers: { "content-type": "application/x-www-form-urlencoded", Authorization: "Basic " + new Buffer( process.env.CLIENT_ID + ":" + process.env.CLIENT_SECRET ).toString("base64"), }, } );
也可以直接用CommonJS风格导入:
const axios = require("axios");
额外注意事项
- 确认已正确安装Axios依赖:
npm install axios - 检查Firebase Functions的环境变量
CLIENT_ID、CLIENT_SECRET等是否配置到位,避免后续出现授权失败问题
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

