【发布时间】:2020-02-17 12:06:48
【问题描述】:
我是后端开发新手。我尝试开发一个烧瓶restful api。我按照文档制作了建议的最小 api,它只是返回一个 jsonified dict。使用邮递员、curl 和浏览器,没问题,api 正在运行并响应我的请求。
但是,从我的 react 本机应用程序中,我总是收到网络错误。
我尝试了很多东西:
- 烧瓶服务器的多个 IP 地址
- 使用 axios 的不同方式
- 不同的操作系统:win10、ubuntu
- 不同的端点:/、/api、/test
- 编写 api 的不同方式(flask-restful 类、flask 应用程序函数...)
- 来自网络文档的手册:我的设备的开发模式、chrome 开发工具(端口转发)
- 我让 react native 开发人员检查我的客户端代码,他说没有错,
精度:
- python 代码在 conda 虚拟环境下运行
- appli 在 node js 和 expo 下运行
- 我的应用程序和我的 api 的容器文件夹处于同一级别
- 烧瓶服务器没有响应 404 或其他什么,它根本没有响应,react native 中返回的错误是网络错误
- 根据 url,网络错误会立即发生或延迟 2 分钟后发生
- 当邮递员、curl、chrome 调用时,flask 会显示请求和状态,但当我按下 react native 应用程序中的按钮时没有反应
这是我的(其中一个)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]
我在烧瓶 api 上看到了很多教程、视频、文章,但我没有发现我错在哪里。如果您有任何想法,请告诉我!我认为客户端和服务器代码都可以,问题似乎是我的请求被某些东西阻止了。
【问题讨论】:
-
您好,您用邮递员证明了端点吗?
-
当我在邮递员中输入IP地址时,它给了我正确的答案
-
您是否在服务器端配置了 CORS? flask-cors.readthedocs.io/en/latest
-
哦,不,我没有看到我发现的一些文档中提到了 cors,但我没有尝试过!谢谢,我试试
-
例如,没有更多结果。但是需要cors,比以前好多了=)
标签: python react-native axios flask-restful