我是新的后端开发。我尝试开发一个flask restful API。我按照文档和建议的最小api,这只是返回一个jsonified dict。与 Postman , curl 和在浏览器中,没有问题,api正在运行,并响应我的请求。
然而,从我的react原生应用程序,我总是得到一个Netwrok错误。
我试了很多方法:
- 文件夹服务器的多个IP地址
- 使用axio的不同方式
- 不同操作系统:win10,Ubuntu
- 不同终点:/,/API,/测试
- 编写API的不同方式(flak-restful类、flask应用程序函数...)
- 来自Web文档的manips:我的设备的开发模式,chrome开发工具(端口转发)
- 我让一个react原生开发人员检查我的客户端代码,他说没什么问题,
精密度: - python代码在conda虚拟环境下运行
- appli在节点js和expo下运行
- 我的应用程序和我的API的容器文件夹在同一级别
- flask服务器不响应404或其他,它根本不响应,react native中返回的错误是网络错误
- 根据url,网络错误立即发生或延迟2分钟后发生
- 当 Postman 、curl、chrome调用时,flask显示请求和状态,但当我从react原生应用按下按钮时,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]
我看了很多关于flask api的教程,视频,文章,但是我没有发现我哪里错了。如果你有什么想法,请告诉我!我认为客户端和服务器代码都可以,问题似乎是我的请求被什么东西阻止了。
2条答案
按热度按时间cu6pst1q1#
解决:问题是我的防火墙...谢谢里卡多的CORS doc =)
whitzsjs2#
对我有效的方法是在react native的API调用中将localhost的IP地址更改为我的网络IP,然后使用下面的命令启动flask应用程序。