在 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 分为两部分。host
和 path
。如果需要相应地从单独的域加载,您可以更改主机。这只是一个建议。但是,您无需在 Angular 级别执行任何操作即可启用 CORS,因为它发生在 Web 服务器级别。【参考方案2】:
您可以将主机名存储在另一个变量中并将其与 网址
let host = "http://localhost:8080"
$http.post(host + "/test/login/doStuff", dataObj)
【讨论】:
以上是关于在 Angular+ 节点中实现 CORS的主要内容,如果未能解决你的问题,请参考以下文章