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

React Native中Axios Post报错:Property 'btoa'不存在

解决Axios Post请求中btoa不存在的ReferenceError问题

问题根源

你遇到的ReferenceError: Property 'btoa' doesn't exist,本质是Axios使用auth配置项时,会自动调用全局的btoa()函数生成Basic Auth的Base64凭证,但你的运行环境(比如React Native、旧版Node.js或特定嵌入式前端环境)没有提供这个全局函数。另外注意:你的代码里把auth对象放在了请求体参数位置,这不是Axios处理身份验证的正确方式——auth应该属于请求配置项,而非请求体内容。

解决方案

1. 手动构造Authorization请求头(推荐)

绕开Axios自动调用btoa的逻辑,自己生成认证头,同时纠正参数位置:

const username = 'james';
const password = '123456';

// 根据运行环境选择Base64编码方式
let authBase64;
if (typeof btoa !== 'undefined') {
  // 浏览器环境直接用btoa
  authBase64 = btoa(`${username}:${password}`);
} else {
  // Node.js或无btoa的环境用Buffer
  authBase64 = Buffer.from(`${username}:${password}`).toString('base64');
}

axios.post('https://........', {}, { // 第二个参数是请求体,没数据就传空对象
  headers: {
    'Authorization': `Basic ${authBase64}`
  }
}).then(response => {
  console.log(response);
}).catch(error => {
  console.log(error);
});

2. 补充btoa的Polyfill

如果你的环境需要全局支持btoa,可以添加一个简易的polyfill(放在Axios请求前执行):

// 仅在无btoa时添加polyfill
if (typeof btoa === 'undefined') {
  globalThis.btoa = function(str) {
    return Buffer.from(str).toString('base64');
  };
}

// 之后正常使用Axios的auth配置(注意放在config里)
axios.post('https://........', {}, {
  auth: {
    username: 'james',
    password: '123456'
  }
}).then(response => {
  console.log(response);
}).catch(error => {
  console.log(error);
});

3. 确认请求参数位置

你之前的代码把auth放在了请求体里,这会导致Axios无法识别为身份验证配置,同时可能触发后端或Axios内部的异常处理,间接引发btoa相关错误。务必将auth或自定义的headers放在Axios请求的第三个参数(配置项)中。

为什么添加Get请求后正常?

大概率是你的Get请求正确将auth放在了配置项中,且该请求触发了环境中某个btoa polyfill的加载(比如第三方库或框架在首次网络请求时注入了polyfill),因此后续的Post请求能正常使用btoa。但这只是临时的巧合,建议按上述方案彻底解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:22:41