CapacitorJS打包的Android App无法连接本地Node.js后端问题咨询
修复方案
Web端访问正常说明后端业务逻辑无异常,移动端连接失败是本地环境网络映射、系统网络安全规则差异导致,按以下步骤调整:
- 替换错误的本地请求地址:移动端环境中
localhost/127.0.0.1指向设备自身,而非运行后端的开发电脑,需要按运行环境替换基地址:- 安卓模拟器:使用安卓预留的宿主电脑映射地址
10.0.2.2,后端请求地址改为http://10.0.2.2:3000 - 实体真机:将手机与开发电脑接入同一局域网,查询开发电脑的局域网IP(Windows执行
ipconfig、Mac/Linux执行ip a查看,通常为192.168.x.x段地址),后端请求地址改为http://<开发电脑局域网IP>:3000,同时放开电脑防火墙对3000端口的入站拦截。
- 安卓模拟器:使用安卓预留的宿主电脑映射地址
- 调整后端服务监听范围:Express默认可能仅绑定本地回环地址,仅允许本机访问,需要将启动监听的配置改为绑定所有网卡,确保同局域网设备、模拟器可访问:
// 调整监听配置 app.listen(3000, '0.0.0.0', () => { console.log('服务已启动,支持局域网访问') })
- 解除安卓端明文HTTP请求限制:安卓9及以上版本默认拦截所有非HTTPS的明文请求,本地调试用的HTTP地址会被系统直接阻断,打开安卓工程路径下的
android/app/src/main/AndroidManifest.xml,在<application>标签中添加android:usesCleartextTraffic="true"属性:
<application android:name=".MainApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:usesCleartextTraffic="true"> <!-- 新增该行配置 --> <!-- 其他原有配置 --> </application>
- 核对CORS中间件挂载顺序:你当前的CORS配置允许所有源携带凭证访问,逻辑本身没有问题,但需要确保
app.use(cors(...))的代码写在所有业务路由、接口路由定义之前,否则配置不会对后置路由生效。
如果后续调试iOS端,除上述地址替换、服务监听配置外,还需要在iOS工程的Info.plist文件中添加NSAppTransportSecurity配置,放开本地HTTP请求权限即可。
内容的提问来源于stack exchange,提问作者Andrei Bogdan
相关产品推荐
相关产品推荐

