【问题标题】:How To Confirm Angular App Proxy is Working Properly (v7)如何确认 Angular App Proxy 工作正常 (v7)
【发布时间】:2019-01-10 21:20:48
【问题描述】:

我的 Angluar 应用程序 api 与应用程序在 ng serve 中运行的端口 (:8087) 不同。

我正在尝试获取对 api 的请求,例如:/api/settings 转到 http://localhost:8087/api/settings 而不是 http://localhost:4200/api/settings

我尝试设置一个代理,如下所示:https://angular.io/guide/build#proxying-to-a-backend-server,但有些东西不起作用,我不太了解它,不知道我应该期待什么。

当我通过http://localhost:8087/api/settings 直接联系 API 时,我得到了预期的响应。

我只使用:ng serve 运行应用程序。

proxy.conf.json:


    {
      "/api/*": {
        "target": "http://localhost:8087",
        "secure": false,
        "changeOrigin": true,
        "logLevel": "debug"
      }
    }


    [HPM] GET /api/store/categories -> http://localhost:8087
    [HPM] GET /api/store/cart -> http://localhost:8087
    [HPM] GET /api/settings -> http://localhost:8087

浏览器中的网络请求显示为Request URL: http://localhost:4200/api/settings... 但我不确定这是否应该反映不同的端口。应该吗?

Angular CLI:7.0.6 | 节点:8.11.1 | 操作系统:win32 x64 | 角度:7.0.4

实际发生的情况是,我陷入了一个返回另一个的永无止境的循环(这可能是路由的一些问题,但我需要先确认代理是否正常工作)。

【问题讨论】:

  • 尝试删除"changeOrigin": true,并将/api/*更改为简单的/api
  • @AlexanderStaroselsky 尝试了这两种方法均无济于事。你知道我如何确认它正在工作吗?就像,记录器中的消息是您所期望的吗?我希望看到:[HPM] GET /api/settings -> http://localhost:8087/api/settings
  • 您能否确认一下您用于运行 Angular 应用程序的 npm 命令(给定代理)?此外,如果您在基本 App 组件之类的东西中执行 API 调用,您会收到响应或任何错误吗?此外,您能否确认,如果您直接点击 API 端点,您是否获得了适当的响应(抛出浏览器或 Postman 或 cURL 等工具)?请更新您的问题以反映该信息。谢谢!
  • @AlexanderStaroselsky 我更新了我原来的问题来回答你的问题。 :)
  • 您能否尝试使用 ng serve --proxy-config proxy.conf.json 运行 Angular 并告诉我是否有所作为。或者你有没有在angular.json注册代理?

标签: angular proxy command-line-interface


【解决方案1】:

尝试将您的配置更改为以下内容:

{
  "/api": {
    "target": "http://localhost:8087",
    "secure": false,
    "logLevel": "debug"
  }
}

您不需要changeOrigin,因为您在此开发设置中的API 也在localhost 上。如果您正在调用某种外部 API,则可能有必要,但当服务器和客户端都在 localhost 上时,则不需要。

回答您关于如何确定它是否有效的问题。从您的组件/服务/等执行对这些相应端点的 API 调用,看看您是否获得了您期望的数据。记录器,即使设置了“调试”级别,也不会显示此信息。浏览器开发者工具网络选项卡不会显示对http://localhost:8087/ 的调用,它会显示http://localhost:4200/。如果您可以从端点接收数据,则表明它可以正常工作。

如果您想增强日志输出以显示完整路径,可以考虑使用http-proxy-middleware events,例如onProxyReq()onProxyRes()

希望对您有所帮助!

【讨论】:

  • 是的,我都试过了。我看到一些文章说一个和另一个。我只需要能够验证它正在做我要求它做的事情(通过开发工具或记录器)。
猜你喜欢
  • 2018-08-08
  • 2014-02-15
  • 2018-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
  • 2012-11-05
相关资源
最近更新 更多