【问题标题】:MEAN Stack - Angular can only Communicate through the domain nameMEAN Stack - Angular 只能通过域名进行通信
【发布时间】:2019-03-09 04:33:29
【问题描述】:

我在基于 UBUNTU 18 的 Digital Ocean Droplet 上设置了一个平均堆栈。 我在 nginx 端口 80 上使用 Angular6,在同一台机器上运行的端口 3333 上使用 nodejs。我还在 nodejs 上启用了 CORS。角度应用程序作为产品构建并复制到服务器。我已经按照数字海洋的描述启用了私有 IP,我可以使用 localhost、内部 IP 和 127.0.0.1 成功地 curl api(nodejs)

现在的问题:当我从 angular6 调用 API 时,除了域名之外的任何东西都给了我一个错误 -> 连接被拒绝,未知错误!在我的开发 PC 上本地一切正常!我认为这可能是一个 cors 问题,但我可以通过 IP 从我的开发机器访问远程 API,没有任何问题。我错过了什么?我发现能够通过域名而不是通过内部IP访问它很奇怪...... 请注意,在开发 PC 上,angular 以 ng serve 的身份运行......唯一的区别是应用程序在将其上传到远程服务器之前作为 prod 构建。

【问题讨论】:

  • 所以当你给它一个内部 ip 时,angular 不起作用?
  • 不返回:连接被拒绝,未知错误。我可以从服务器内部卷曲它并获得响应。
  • Angular 代码在您的浏览器中运行,而不是在服务器上。你不能从私网外部访问内部ip。
  • 噢!你是绝对正确的。我的错。感谢您的宝贵时间!
  • 太棒了,np。我将在下面给出一个正确的答案,以便我们可以将此人标记为已解决并帮助保持 stackoverflow 干净

标签: node.js angular localhost mean


【解决方案1】:

Angular 无法访问私有 IP,因为 Angular 代码在您的浏览器而非服务器上运行。因此,除非您通过 vnc 或其他方式在服务器上运行浏览器,否则您的本地计算机无法访问私有网络(因此也无法访问私有 ip)。

Digital Ocean 可能建议你设置一个私有 ip,这样你就可以把你的数据库放在私有网络中,这样它就被防火墙关闭了。

Anyhoo,在您的 Angular 代码中使用 FQDN 或公共 ip。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多