Node.js 错误:连接 ECONNREFUSED

Posted

技术标签:

【中文标题】Node.js 错误:连接 ECONNREFUSED【英文标题】:Node.js Error: connect ECONNREFUSED 【发布时间】:2013-01-05 03:59:01 【问题描述】:

我是 node 新手,在一个简单的教程中遇到了这个错误。

我在 OS X 10.8.2 上从 CodeRunner 和终端尝试这个。 我也尝试将我的模块放在node_modules 文件夹中。

我可以说这是某种连接问题,但我不知道为什么?

events.js:71
        throw arguments[1]; // Unhandled 'error' event
                       ^
Error: connect ECONNREFUSED
    at errnoException (net.js:770:11)
    at Object.afterConnect [as oncomplete] (net.js:761:19)

app.js:

var makeRequest = require('./make_request');

makeRequest("Here's looking at you, kid");
makeRequest("Hello, this is dog");

make_request.js:

var http = require('http');

var makeRequest = function(message) 

    //var message = "Here's looking at you, kid.";
    var options = 
        host: 'localhost', port: 8080, path:'/', method: 'POST'
    

    var request = http.request(options, function(response) 
        response.on('data', function(data) 
            console.log(data);
        );
    );
    request.write(message);
    request.end();
;

module.exports = makeRequest;

【问题讨论】:

我也把这段代码放在https://c9.io/ 上并得到同样的错误。 开放接收我们的输出还是什么?使用服务定义的端口和主机的节点服务器上的相同问题。如果您真的知道这里发生了什么,请发布一个真正的解决方案,而不是像问题我是节点新手中所述的模糊 cmets。 @ian,您的 cod 中没有任何地方创建服务器。那么,您在尝试连接的端口 8080 上运行了什么? 对于任何未来的读者,我试图向 php 服务器发出 API 请求,但我的请求端口未设置为 80。更改后我的 http 请求工作正常。 我正在运行节点 17(在 M1 Mac 上),我通过 brew uninstall node 将其删除,然后使用 brew install node@16 安装节点 16。工作了一个款待。我可能不得不brew link --force node@16,但我现在不记得了。 【参考方案1】:

当您调用的服务器拒绝连接时,您很可能正在为 node.js 死机而苦苦挣扎。试试这个:

process.on('uncaughtException', function (err) 
    console.log(err);
); 

这使您的服务器保持运行,并为您提供一个附加调试器并寻找更深层次问题的地方。

【讨论】:

在未捕获的异常之后保持服务器运行是一件危险的事情。您不知道异常是否使您的服务器处于预期状态。杀死服务器并让另一个进程重新启动它(并记录异常,显然)要安全得多。 一般来说,在黑暗中捕获所有异常并不是一个好主意。看看this answer。 这取决于您要完成的工作。我正在编写一个监控应用程序,在这个应用程序中,跟上并继续前进至关重要。似乎 OP 正在努力找出问题所在。所有其他答案都是关于可能导致此错误的特定问题。作为调试步骤,在您深入研究真正的问题之前,几乎总是需要上述步骤。我也很奇怪,您的服务器因一次故障而死亡,导致所有其他客户端调用开始失败?【参考方案2】:

您正在尝试连接到 localhost:8080 ... 是否有任何服务在您的 localhost 和此端口上运行?如果不是,则拒绝连接,从而导致此错误。我建议先检查 localhost:8080 上是否有任何东西在运行。

【讨论】:

【参考方案3】:

我对 ghost 和 heroku 有同样的问题。

heroku config:set NODE_ENV=production 

解决了!

检查服务器正在运行的配置和环境。

【讨论】:

您能解释一下为什么这可以解决问题吗? 我使用了heroku config:set NPM_CONFIG_PRODUCTION=false。我想知道它是如何工作的【参考方案4】:

当您运行上面的代码时,您需要在端口 8080 上运行一个服务器,该代码只是通过响应返回请求。将下面的代码复制到一个单独的文件(比如“server.js”)并使用节点命令(node server.js)启动这个服务器。然后,您可以从单独的命令行单独运行上面的代码(node app.js)。

var http = require('http');

http.createServer(function(request, response)

    //The following code will print out the incoming request text
    request.pipe(response);

).listen(8080, '127.0.0.1');

console.log('Listening on port 8080...');

【讨论】:

【参考方案5】:

如果您的代码中有任何数据库连接但您尚未启动数据库服务器,有时可能会发生这种情况。

我的情况是我有一些代码可以连接到 mongodb

mongoose.connect("mongodb://localhost:27017/demoDb");

在我使用命令 mongod 启动 mongodb 服务器后,此错误消失了

【讨论】:

【参考方案6】:

如果您在 MEAN (Mongo-Express-AngularJS-Node) 堆栈上,请先运行 mongod,此错误消息将消失。

【讨论】:

搜索了 2 天,然后我看到了您的评论,节省了我的时间【参考方案7】:

当 Node.js 进程仍在运行并尝试再次启动服务器时,人们会遇到此错误。试试这个:

ps aux | grep node

这将打印以下内容:

user    7668  4.3  1.0  42060 10708 pts/1    Sl+  20:36   0:00 node server
user    7749  0.0  0.0   4384   832 pts/8    S+   20:37   0:00 grep --color=auto node

在这种情况下,进程将是 pid 为 7668 的进程。要杀死它并重新启动服务器,请运行 kill -9 7668

【讨论】:

这不是问题所在。他在尝试提出请求时被拒绝连接。【参考方案8】:

检查在终端中启动 mysql。使用下面的命令

mysql-ctl start

在我的情况下它有效

【讨论】:

【参考方案9】:

ECONNREFUSED 错误表示无法与目标服务建立连接(在您的情况下为 localhost:8080)。检查您在 8080 端口上运行的服务。

要了解有关 node.js 错误的更多信息,请参阅doc。

【讨论】:

【参考方案10】:

Unhandled 'error' event 指的是没有为请求提供函数来传递错误。如果没有这个事件,节点进程会以错误结束,而不是优雅地失败并提供实际反馈。您可以在 request.write 行之前设置事件以发现任何问题:

request.on('error', function(err)

    console.log(err);
);

更多示例如下:

https://nodejs.org/api/http.html#http_http_request_options_callback

【讨论】:

【参考方案11】:

从不同的命令行运行 server.js,从不同的命令行运行 client.js

【讨论】:

【参考方案12】:

有一个类似的问题,结果打印的监听端口与实际不同。请求字符串或监听函数中的错别字可能会使目标服务器看起来不存在。

【讨论】:

【参考方案13】:

对我来说,https-proxy-agent 请求的库 node-agent-base v4.x 中存在问题,而 newrelic v5.x 库请求它的一侧。

问题是 node-agent-base v4.x 出于一些奇妙的想法决定修补核心 https.get 请求(您可以在 repo 中的文件 patch-core.js 中看到这一点)。当我使用使用 https.get 的库时,它失败了,因为 node-agent-base v4.x 更改了函数签名,这给了我对 127.0.0.1 的请求,因为初始 url 丢失了......

我已通过更新到 newrelic 6.x 的下一版本来解决此问题,其中 node-agent-base v4.x 没有此类“补丁”。

这简直太疯狂了……希望我的回复能为您节省一些时间,我已经花了几天时间来调试它。

【讨论】:

【参考方案14】:

我在使用 Postman 的开发环境中检查 API 时遇到了同样的问题。 我从字面上搜索了所有答案都来自谷歌,但无济于事。

解决方案: 我刚刚搬到“失眠”(邮递员的替代品),它工作得很好。希望此解决方法可能会有所帮助。

【讨论】:

以上是关于Node.js 错误:连接 ECONNREFUSED的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 中的“连接 EMFILE”错误

Node.js MySQL - 错误:连接 ECONNREFUSED

node.js中curl的连接错误

postgres 与 node.js 连接中的 SASL 错误

在 node.js 中编写 ECONNRESET 错误和套接字连接检查

Heroku + MongoLab 插件与 Node.js 应用程序的连接错误 - 错误:连接 ECONNREFUSED 127.0.0.1:27017