如何从本机应用程序联系 flask-restful api?

How to contact flask-restful api from react native app?

我是后端开发新手。我尝试开发一个烧瓶 restful api。我遵循了文档并提出了建议的最小 api,这只是返回一个 jsonified dict。使用 postman、curl 和在浏览器中,没问题,api 是 运行 并响应我的请求。

然而,在我的 React Native 应用程序中,我总是收到网络错误。

我尝试了很多东西:
- 烧瓶服务器的多个 IP 地址
- 使用 axios
的不同方式 - 不同 os : win10, ubuntu
- 不同的端点:/, /api, /test
- 不同的写法 api (flask-restful class, flask app functions ...)
- 来自网络文档的操作:我设备的开发模式,chrome 开发工具(端口转发)
- 我请一位 React Native 开发人员检查我的客户端代码,他说没有错,

精度:
- python 代码在 conda 虚拟环境下运行
- appli 在节点 js 和 expo 下运行
- 我的应用程序和 api 的容器文件夹处于同一级别
- flask 服务器不响应 404 或其他什么,它根本不响应,react native 中返回的错误是网络错误
- 根据 url,网络错误会立即发生或延迟 2 分钟后发生
- 当 postman、curl、chrome 调用时,flask 会显示请求和状态,但当我从 React 本机应用

中按下我的按钮时没有反应

这是我的 python 代码的(其中之一):

from flask import (Flask, jsonify)
# from flask_restful import Resource, Api
from flask_cors import CORS, cross_origin

app = Flask(__name__)
CORS(app)

@app.route("/api", methods=["GET"])
def get():
    return jsonify(hello='bouh !')

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000, debug=True)

这是客户端代码:

import React, {Component} from 'react';
import { View, Button } from 'react-native';
import axios from 'axios'; 

import { sharedStyles } from '../../SHARED/_shared';

var url = "http://192.168.1.16:5000/api";

export default class PrevCommune extends Component {
    constructor(props){
        super(props);
        this.navigation=this.props.navigation;
    };

    getAxios=()=>{
        axios.get(`${url}`).then((response)=>{
            console.log("succes axios :",response);
        }).catch((error)=>{
            console.log("fail axios :", error);
        });
    };

    getFetch=()=>{
        fetch(url).then((response)=>{
            console.log("succes fetch :",response)
        }).catch((error)=>{
            console.log("fail fetch :",error)
        })
    }

    render(){
        return (
            <View style={sharedStyles.mainContainer}>
                <Button onPress={()=>this.getAxios()} title={"get axios"}></Button>

                <Button onPress={()=>this.getFetch()} title={"get fetch"}></Button>
            </View>
        );
    };
};

请求返回的行:

fail axios : [Error: Network Error]
fail fetch : [TypeError: Network request failed]

我看了很多 tutos、videos、关于 flask 的文章api,但我没有找到我错在哪里。如果您有任何想法,请告诉我!我认为客户端和服务器代码都可以,问题似乎是我的请求被什么东西阻止了。

已解决:问题出在我的防火墙上...谢谢 riccardo 的 CORS 文档 =)