1

我正在构建一个单页应用程序(使用 AngularJS),该应用程序将来自它对遗留系统的 REST API 调用的数据呈现出来。这个遗留系统非常大,用 Java 编写,部署需要几分钟,所以我们决定开发与遗留系统完全分离的单页应用程序会更有效率。

一旦我们尝试与遗留系统的 REST API 通信,就会出现问题。虽然这两个应用程序都在本地部署到同一主机,但它们部署在不同的应用程序服务器上,因此我需要在通信时使用不同的端口。但由于 SPA 与不同端口上的 REST API 通信,浏览器阻止了我的请求以防止跨站点脚本攻击。

我们发现这个构建工具名称为lineman(利用 grunt),它可以轻松代理 http 请求。这让我们绕过了跨站点脚本限制,但这仅适用于开发模式。

现在我们已经完成了概念验证,我们想知道我们应该如何在没有代理的情况下一起部署这些应用程序。我很难找到关于如何做到这一点的建议,因为 Angular 一开始并不假设你有一个后端,而且大多数在前端使用 Angular 的人并没有在后端使用 Java(如果这很重要的话) .

我们遇到了这样的问题,应用程序的上下文路径会根据它们是在 prod 模式还是 dev 模式下部署而发生变化,因此我们必须想出聪明的方法来避免在这两种模式下都工作的断开链接。我想知道我是否/在哪里走错了一步。我是否应该避免在与后端不同的服务器上开发 SPA?

4

2 回答 2

1

我们有同样的问题。URL 的情况是,由于您处于不同的环境中,因此您的 java REST API 将具有不同的 URL 路径。

为了使这些路径级联到 Angular 应用程序,我们必须首先将 Web 应用程序(生成 Angular 的应用程序)中的基本路径外部化,以使用在部署期间根据部署位置设置的值。我们的应用服务器中有值链接到配置文件中的 XML 值,然后我们在应用程序中引用这些值。

然后我们创建一个从 Angular 应用程序到生成它的 web 应用程序(不是 java REST API)的调用,该调用将返回对环境正确的 URL。

在 Angular 应用程序中,我们可以使用正确的基本路径设置资源(URL 的其余部分应该在不同环境中保持相同)。

如果您可以通过外部化环境设置使第一部分正常工作,那么其余部分并不困难。

于 2013-08-23T20:27:17.850 回答
1

我会将 apache 放在前面并使用 mod_proxy 作为应用程序的反向代理。

假设您的 REST API 位于 http://localhost:9000。如果 Angular 应用程序只是静态资产,您可以直接在 apache 下部署它。如果不是,您也可以反向代理它。对于 REST api yoivsetup 一个反向代理,例如 /api 到 localhost:9000。因此,任何访问http://some.host.name/api的 apache 请求现在都将被转发到遗留系统。现在修复 Angular 应用程序,您就完成了。对于本地开发,您可以使用 node-http-proxy,它很容易以类似的方式进行设置

于 2013-08-24T18:09:03.880 回答