【问题标题】:angular universal https problems角度通用 https 问题
【发布时间】:2017-10-04 17:10:36
【问题描述】:

我设置了一个有角度的通用应用程序。我使用 localhost 在服务器端执行 POST 请求以预渲染我的应用程序,这工作正常。

一个示例工作网址是http://localhost:8000/api/get-info

我现在已在外部 url(apache 服务器)上将应用程序投入生产。我也在使用 ssl。

现在,当我尝试在服务器端发出 POST 请求以预渲染我的应用程序时,我收到状态为:0,url:null 的响应(我假设这意味着连接被拒绝)。

一个无效的 URL 示例是 https://mywebsite.com/api/get-info

真正让我难过的是,当应用程序在客户端加载时,所有 HTTPS 请求都开始工作。所以问题是我无法让快递服务器向我的外部 url 发送 POST 请求。

我已经在服务器端测试了对不同网站 (twitter) 的发布请求,这似乎也可以正常工作。所以我不完全确定我哪里出错了。

我也已经将 CORS 设置为“*”。

【问题讨论】:

  • 您的 API 在哪里运行?与 ssr 引擎相同的 Express.js 服务器?
  • 正在使用自生成的 ssl 密钥或者您购买了它?!
  • 那不是一个有效的回复,看这个链接stackoverflow.com/questions/19858251/…
  • @moema 我的 API 在同一台服务器上运行。
  • @jingle96 我从 Gandi 买的。

标签: node.js apache angular express universal


【解决方案1】:

尝试使用

http://localhost:8000/api/get-info

也在生产中。由于您的 Angular 应用程序与您的 API 运行在同一台服务器上呈现,因此使用 localhost 应该可以正常工作。如果您使用的是外部 URL,则无关紧要。

我对我的翻译做了类似的事情(它是一个 GET,但这不重要):

if ( this.isServer ) {
     translateLoader.setUrl( 'http://localhost:4000/assets/localization/' );
 } else {
     translateLoader.setUrl( 'assets/localization/' );
 }

它可以在本地和生产环境(服务器和客户端)工作。

【讨论】:

  • 干杯,我用那个方法让它工作了。关键还在于让服务器通过 HTTP 监听不同的端口。所以服务端在3000端口监听HTTP,在8000端口监听HTTPS。服务端请求localhost:3000/api/get-info,客户端请求my-website.com/api/get-info
  • 完美!这实际上是我的意思,但我忘记了你的 HTTPS
【解决方案2】:

我自己这两天才遇到这个问题。请看我对https://github.com/angular/universal/issues/856#issuecomment-426254727的评论。

基本上我所做的是我在 Angular 中进行了条件检查,以查看 APP 是在浏览器中还是在服务器中运行(由 Angular Universal 呈现),并将我的 API 端点相应地更改为 https 中的实际 IP 或 http 中的 localhost。同样在我的 Nginx 设置中,我只通过检查 server_name 是否为 localhost 来将来自浏览器的传入请求重定向到 https。

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多