Axios 不调用本地主机 API

问题描述

我有一个 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。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...