ECONNREFUSED 用于从本地主机到另一个本地主机的代理请求

Lev*_*ter 6 javascript php npm econnrefused angular

首先,我是 Angular 的新手,我正在逐步观看教程视频。我在这个问题上被困了近两周,并花了很多时间在其他类似的论坛上寻找解决方案。我意识到这是一个常见的错误,但在尝试了几十个左右的解决方案但没有成功之后,我想我不妨发布我的经验,也许它可以为我们许多人似乎遇到的这个问题提供一些线索。

问题

当继续观看 1:42:00 左右开始的视频的“Angular 教程 #13”部分时,会发生错误。我完全按照视频中所示的步骤进行操作,但在运行“npm start”的终端中遇到以下错误消息:
[HPM] Error occurred while trying to proxy request /api/file.php from localhost:4200 to http://localhost:1234 (ECONNREFUSED)
My package.json script for “start”: “ngserve --proxy-config proxyconfig.json “并且我的 proxyconfig.json 包含:

{
    "/api":{
        "target": "http://localhost:1234",
        "secure": false,
        "changeOrigin": true
    }
}
Run Code Online (Sandbox Code Playgroud)

在 CMD 中,我导航到文件夹“intro2angular”,它是“/test/api/file.php”的根目录,并且在 VisualStudioCode 中的 powershell 中
php -S localhost:1234运行之前运行。npm start然后我就跑npm start。代码编译成功。在 Chrome 中,如果我转到,http://localhost:1234/test/api/file.php文件就会显示在浏览器中。但是,如果我转到并单击执行代码以请求file.php 的http://localhost:4200锚点,则错误将显示在终端中。在Chrome 开发者工具的网络选项卡中,当我检查file.php的标头时,我看到以下内容:[HPM] Error occurred while trying to proxy request /api/file.php from localhost:4200 to http://localhost:1234 (ECONNREFUSED)

Request URL: http://localhost:4200/api/file.php
Request Method: GET
Status Code: 504 Gateway Timeout
Remote Address: 127.0.0.1:4200
Referrer Policy: no-referrer-when-downgrade
Run Code Online (Sandbox Code Playgroud)

请原谅我冗长地解释了我遵循的每一个步骤,但由于我已经看到了几个类似的论坛帖子,涉及在尝试使用代理时引发的 ECONNREFUSED 错误,我认为包括每个小细节可能是必要的,以区分 ECONNREFUSED 的来源本例中的错误。如果需要更多详细信息/代码,我非常乐意将其包含在内。

到目前为止我尝试过的解决方案

请注意,这不是完整的列表,我尝试了其他几种解决方案,但这些似乎是最常见的,对其他人也有效。另外,我并不是说我不会再尝试这些解决方案,因为我愿意接受任何和所有建议。

  1. 为 Angular 应用程序和 file.php 指定随机本地主机端口
  2. 用于为函数调用setTimeout添加延迟.getData()
  3. 禁用防火墙
  4. 包括proxyconfig.json"pathRewrite": {"^/api" : ""}的选项

我感谢围绕此问题的任何和所有帮助/建议/讨论,因为我自己没有取得成功,并且在解决此问题之前我无法继续使用角度教程。先感谢您。

小智 13

我遇到了同样的问题并寻找了很长时间的解决方案......

就我而言,它有助于提供本地主机的 IP,而不是“本地主机”。

因此,将您的代理配置更改为:

{
    "/api":{
        "target": "http://127.0.0.1:1234",
        "secure": false,
        "changeOrigin": true
    }
}
Run Code Online (Sandbox Code Playgroud)

并且尝试使用“ngserve --proxy-config proxyconfig.json”而不是 npm start 版本。我读到有时某些人会忽略 package.json 配置部分。

希望这可以帮助!


小智 7

如果您使用 Angular 和 PHP 内置服务器,则必须使用双方的 IP 地址。所以类似:"target": "http://127.0.0.1:8000"在 Angular 方面 +php -S 127.0.0.1:8000 -t public在 PHP 方面。

在这里找到这个提示:https://forum.freecodecamp.org/t/econnrefused-error-during-learn-angular-freecodecamp-org-video/245739