在 Angular+ 节点中实现 CORS

Posted

技术标签:

【中文标题】在 Angular+ 节点中实现 CORS【英文标题】:Implementing CORS in Angular+ Node 【发布时间】:2015-08-18 07:50:57 【问题描述】:

我在 Node+Angular js 中有一个已实现的前端,而后端在 Jetty 中运行,暴露了 REST 服务。我想将 REST 请求从 FE(Angular) 发送到后端。当我将完整的 URL 传递给 $http.get 时工作正常。但是我想让它成为一个可配置的值,这样 URL/端口的任何更改都不需要我在配置之外的其他地方进行更改。目前我将它作为 $http.post("http://localhost:8080/test/login/doStuff",dataObj) 传递 但是我想将它作为$http.post("/test/login/doStuff",dataObj) 传递,它应该自动附加http://localhost:8080.Can 有人帮我吗?

谢谢

【问题讨论】:

【参考方案1】:

CORS 用于启用两个不同主机之间的通信信任。例如,如果托管在两个不同服务器(不在同一个域中)的前端和后端需要 CORS 在它们之间进行通信。 但是,在您的情况下,我没有看到有效的情况,除非它们按照说明分开部署。 只要 Web 应用程序托管在同一服务器中,它们就始终可以使用相对路径进行通信。 如果应用托管在/myApp 文件夹中,它可以使用/myApp/other-web-folders 访问其他资源。 如果您想在域外进行通信,则始终必须使用完整的 url。希望这能澄清你的疑虑。

【讨论】:

感谢您的回复。我明白。我想让 url 可配置。有什么方法可以让我在 angular 方法中指定相对 url,那么其他域 url 将被附加? 你可以设计一个这样的机制。始终将 URL 分为两部分。 hostpath。如果需要相应地从单独的域加载,您可以更改主机。这只是一个建议。但是,您无需在 Angular 级别执行任何操作即可启用 CORS,因为它发生在 Web 服务器级别。【参考方案2】:

您可以将主机名存储在另一个变量中并将其与 网址

let host = "http://localhost:8080"

$http.post(host + "/test/login/doStuff", dataObj)

【讨论】:

以上是关于在 Angular+ 节点中实现 CORS的主要内容,如果未能解决你的问题,请参考以下文章

在 Angular 2 中使用节点模块

如何在节点脚本中重用 Angular 6 API 服务?

如何在 Angular 中使用 pg 节点包

在 Angular 4 中使用节点模块(网站刮板)使用失败

在 Angular 6 + 节点 js 中使用令牌的身份验证问题

从 Angular 6 材质树中的子节点获取父层次结构