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

React Native 拉取远程MySQL数据出现网络请求失败问题如何解决?

问题根源&解决步骤

1. 接口请求地址错误

你前端写的http://localhost:3000/FilmShowings指向的是运行React Native应用的设备(模拟器/真机)自身的本地端口,而你的后端服务跑在开发电脑上,两者不在同一个网络上下文,自然请求不通:

  • 安卓模拟器访问电脑本地服务,地址改成http://10.0.2.2:3000/FilmShowings
  • iOS模拟器访问电脑本地服务,地址改成http://<你电脑的局域网IP>:3000/FilmShowings
  • 真机调试的话,确保手机和电脑连同一个WiFi,同样填电脑的局域网IP作为请求地址

2. 明文HTTP请求权限未配置

iOS和安卓系统默认禁止应用发送未加密的HTTP请求,需要单独配置白名单:

  • 安卓:在android/app/src/main/AndroidManifest.xml的application标签增加属性android:usesCleartextTraffic="true"
  • iOS:在ios/[项目名]/Info.plist的NSAppTransportSecurity字典下增加NSAllowsArbitraryLoads设为true

3. 前端数据解析逻辑错误

你的后端接口直接返回电影数据数组,没有外层包裹FilmShowings字段,所以前端的setData(json.FilmShowings)会拿到undefined,改成setData(json)即可。

4. 后端代码潜在问题修复

你当前的后端代码每次收到请求都会新建数据库连接、关闭连接,并发请求时会直接报错,建议调整逻辑如下:

// 服务启动时仅连接一次数据库,去掉单次请求内的connect/end逻辑
connection.connect(err => {
  if (err) throw err;
  console.log('数据库连接成功');
});

app.get('/FilmShowings', function (req, res) {
  connection.query('SELECT * FROM FilmShowings', function (error, results) {
    if (error) return res.status(500).send(error);
    res.send(results);
  });
});

// 配置监听0.0.0.0,允许局域网设备访问服务
app.listen(3000, '0.0.0.0', () => {
  console.log('Go to http://0.0.0.0:3000/FilmShowings to see FilmShowings');
});

5. 调试排查技巧

可以先在手机/模拟器的自带浏览器里直接输入你要请求的接口地址,若能正常拿到返回数据则说明网络/后端配置正常,再排查前端代码逻辑问题即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:42:00