expo-go 开发应用程序未与 Flask API 通信

问题描述 投票:0回答:1

问题详情

我正在开发模式下运行 Android Expo Go 应用程序,该应用程序似乎可以在以下位置使用:

› 选择一个应用程序来打开您的项目 http://192.168.0.49:8081/_expo/loading › 地铁等待 exp://192.168.0.49:8081 › 使用 Expo Go 扫描上面的二维码 (Android) 或相机应用程序 (iOS)

› 网络正在等待 http://localhost:8081

我正在尝试让应用程序与 Flask 后端 API 进行通信:

$ flask --app backend run
 * Serving Flask app 'backend'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000

如果我直接检查正在运行 Expo Go 应用程序的移动设备的 IP,则会显示:

192.168.0.50

我运行flask服务器的机器的IP是:

IPv4 地址。 。 。 。 。 。 。 。 。 。 。 : 192.168.0.49

但是当我尝试从 expo 应用程序向 Flask 服务器执行 GET 请求时,出现网络错误:

ERROR 测试错误:[TypeError:网络请求失败]


代码片段

我的用于执行测试 API ping 的 expo tsx 代码如下所示:

const testFetch = async () => {
    try {
        const response = await fetch('http://192.168.0.49:5000/test');
        const data = await response.json();
        console.log('Test response data:', data);
    } catch (error) {
        console.error('Test error:', error);
    }
};

useEffect(() => {
    testFetch();
}, []);

这会调用烧瓶代码:

@bp.route('/test', methods=['GET'])
def test():
    return jsonify({"message": "Test successful"}), 200

...并且 Flask 应用程序设置为使用 CORS 接收传入请求:

import os
from flask import Flask
from flask_cors import CORS

def create_app(test_config=None):
    # create and configure the app
    app = Flask(__name__, instance_relative_config=True)
    CORS(app, resources={r"/*": {"origins": "*"}})

    if test_config is None:
        # load the instance config, if it exists, when not testing
        app.config.from_pyfile('config.py', silent=True)
    else:
        # load the test config if passed in
        app.config.from_mapping(test_config)

    # ensure the instance folder exists
    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass

    from . import home
    app.register_blueprint(home.bp)

    return app

我尝试解决/发现问题的事情

  1. 我在 Windows Defender 防火墙中设置端口:5000 上的入站和出站流量
  2. 我尝试在手机上的浏览器中打开 Flask 端点。他们不加载
  3. 我尝试将烧瓶应用程序设置为侦听所有端口:
    flask --app backend run --host=0.0.0.0 --port=5000 --debug
  4. 我已经尝试了获取请求中 https://localhost:5000 和实际 IP 地址的所有组合
  5. 我尝试在不同的网络(我的移动数据)上运行 Flask 服务器和 Expo Go 应用程序
  6. 在 WSL 中使用curl 直接(并成功)对 Flask API 执行 ping 操作:
    curl http://192.168.0.49:5000/fetchprogram?programID=test_program
  7. 我尝试将端点从我的 Flask 应用程序切换到有效的公共 API 端点('https://dog.ceo/api/breeds/list/all')
python react-native flask expo ip-address
1个回答
0
投票

事实证明,这是一个问题,我从 WSL2 内部运行 Flask 服务器,并且它不与 Windows 本地主机 IP 共享直接 IP 地址通信路径。

按照本文中的简单说明解决了这个问题:https://www.reddit.com/r/bashonubuntuonwindows/comments/zl57wt/cant_connect_or_ping_wsl_from_host/

© www.soinside.com 2019 - 2024. All rights reserved.