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

为什么React Native中用axios发POST请求失败?Postman和ReactJS可正常请求

问题原因分析
  • 本地地址指向错误:代码中请求的http://localhost:8000指向当前运行环境的本机,Postman和React JS项目运行在开发电脑上,所以可以正常访问后端服务;但React Native运行在模拟器/真机上,此时localhost指向的是移动设备自身,无法访问到开发电脑上的后端接口。
  • 安卓明文HTTP访问限制:安卓9及更高版本系统默认禁止应用发起明文HTTP请求,当前接口使用http协议而非https,也会触发请求失败。
  • 局域网不通:如果使用真机调试,未保证手机和开发电脑在同一局域网下,也无法访问开发电脑本地的后端服务。
解决步骤
  1. 替换正确的接口访问地址
    • 安卓模拟器调试:将localhost替换为安卓模拟器预留的开发电脑映射地址10.0.2.2,即请求地址修改为http://10.0.2.2:8000/auth/jwt/create/
    • iOS模拟器调试:将localhost替换为开发电脑的本地局域网IP,可在电脑终端执行ipconfig(Windows)或ifconfig(Mac/Linux)查看IP,示例地址为http://192.168.3.4:8000/auth/jwt/create/
    • 真机调试:保证手机和开发电脑连接同一WiFi,同样将地址替换为开发电脑的局域网IP
  2. 配置安卓允许明文HTTP请求
    打开安卓项目路径下的android/app/src/main/AndroidManifest.xml,在application标签中添加android:usesCleartextTraffic="true"属性,示例如下:
    <application
        android:name=".MainApplication"
        android:label="@string/app_name"
        android:icon="@mipmap/ic_launcher"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:allowBackup="false"
        android:usesCleartextTraffic="true"
        android:theme="@style/AppTheme">
    
  3. 优化axios请求代码
    axios POST请求传入普通JS对象时,会自动完成序列化并配置正确的Content-Type请求头,无需手动处理,可简化代码如下,同时补充错误日志打印方便定位问题:
    export const login = (email, password) => async dispatch => {
        try {
            const res = await axios.post(`http://替换后的正确地址:8000/auth/jwt/create/`, { email, password });
            console.log('kk');
            dispatch({
                type: LOGIN_SUCCESS,
                payload: res.data
            });
            dispatch(load_user());
        } catch (err) {
            // 打印完整错误信息排查问题
            console.error('请求异常:', err.response?.data || err.message)
        }
    };
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:57:03