问题描述
我有一个 3 层应用程序。 React 作为前端,flask 作为后端,MysqL 作为数据库。我完成了应用程序并且在本地运行良好。然后我将此代码推送到 AWS 实例以实现高可用性,但出现此错误。
xhr.js:160 POST http://localhost:5000/authenticate net::ERR_CONNECTION_REFUSED
这是我的后端代码库
@app.route('/authenticate',methods=['POST'])
def singing():
if __name__ == "__main__":
app.run(host='0.0.0.0')
前端:
handleSubmitClose(){
axios.post('http://localhost:5000/authenticate',{
"username": this.state.username,"password": this.state.password,})
.then((response) => {
console.log("response of HandleSubmitClose - Main Page")
console.log(response);
它们都在同一个 ec2 实例和同一个 docker 中。我无法理解即使它们都在同一个实例上,为什么 Axios 无法获取烧瓶主机名,或者我在这里遗漏了什么。
技巧: 如果我将 Axios 从 localhost 更改为我的 ec2 公共 IP,它就可以工作。但这不是一个好的解决方案,因为我将此实例放入自动缩放组中,我不知道公共 IP 或它是动态的。所以,这个解决方案是不可行的
解决方法
此问题与 Flask 相关,与 Axios 无关。解决此问题的方法是将 app.run(host='0.0.0.0')
更改为 app.run(host='localhost')
。否则在调用 HTTP 请求时,将 URL 从 localhost 更改为您的 ec2 公共 IP。