如何使前端angularjs代码与同一EC2上的后端Java代码进行通信

时间:2019-02-08 21:16:32

标签: java angularjs amazon-web-services spring-boot amazon-ec2

我在私有子网中有一个EC2实例。

我在端口8080上使用nohup部署了Java Spring-boot应用程序

我在AngularJS中有另一个前端应用程序,它在端口9000的同一EC2上使用grunt和pm2运行。

前端应用程序与localhost上的java后端通信。

在前端代码中,我使用$http库来调用Java API,如下所示:

$http({
  method: 'GET',
  url: 'http://localhost:8080/myserv/getdata',
  headers: {
    'Content-Type': '*/*'
  }
}).then(function (response) {
  // processing data...
},
function (err) {
 console.log('ERROR: ' + JSON.stringify(err));
});

EC2实例本身在专用网络上,并通过ELB公开,该ELB将所有Internet通信重定向到EC2上的localhost端口9000。

现在,当我通过浏览器打开应用程序时,可以正确看到用户界面,但是在开发控制台中,我给出了错误消息:

Failed to load resource: net::ERR_CONNECTION_REFUSED

因此,我认为它无法与后端API通信。

在EC2上,当我在http://localhost:9000/home/http://localhost:8080/myserv/getdata上进行卷曲时,两者都给出正确的响应,因此两个应用程序都在运行文件,那么前端为什么不能与后端通信?

我该如何解决?

1 个答案:

答案 0 :(得分:0)

AngularJS在浏览器中运行。 AngularJS应用程序的“ localhost”版本将始终是本地便携式/台式计算机,而Spring Boot的“ localhost”版本是EC2服务器。因此,您要尝试执行的操作将无效。仅当您在本地计算机上运行所有内容时,才可以使用这样的“ localhost”。

Spring Boot应用程序必须被公开,以便可以从将使用该应用程序的每个人的便携式计算机/台式计算机访问它。如果这是公共应用程序,则意味着将其公开到整个Internet。

AngularJS应用程序将需要使用EC2服务器的Internet地址进行配置。