Node.js错误:连接ECONNREFUSED


77

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

我在OS X 10.8.2上从CodeRunner和Terminal尝试此操作。我也尝试过将模块放入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/并得到了相同的错误。
2013年

为即将到来的开放而来还是什么?使用服务定义的端口和主机的节点服务器上也存在同样的问题。如果您真的知道这里发生了什么,请发布一个真正的解决方案,而不要像我刚接触节点的问题中所述的那样,不要发表含糊的评论。
2013年

2
@ian,鳕鱼中没有地方创建服务器。那么,您要连接到的8080端口上正在运行什么?
Brad 2013年

2
对于以后的读者,我试图向PHP服务器发出API请求,而我的请求端口未设置为80。更改后,我的http请求可以正常工作。
Michael J. Calkins

Answers:


50

每当您调用的服务器拒绝连接时,您很可能会在node.js死掉的情况下挣扎。尝试这个:

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

这样不仅可以保持服务器运行,还可以提供一个地方连接调试器并查找更深层的问题。


22
在未捕获的异常之后保持服务器运行是一件危险的事情。您不知道异常是否使您的服务器处于预期状态。杀死服务器并让另一个进程重新启动它(显然会记录异常)要安全得多。
Martin Epsz 2014年

3
通常,在黑暗中捕获所有异常不是一个好主意。看看这个答案
Yan Foto 2015年

4
这取决于您要完成的工作。我正在编写一个监视应用程序,在该应用程序中,保持跟上和保持运动至关重要。看来OP只是在努力找出问题所在而苦苦挣扎。所有其他答案都是关于可能导致此错误的特定问题的。作为调试步骤,上面的内容几乎总是必需的,然后才能深入了解实际问题。我也很奇怪,因为一个故障而导致服务器死机,导致所有其他客户端调用都开始失败,您还可以吗?
user2957009


9

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


6

当您运行上面的代码时,您需要在端口8080上运行服务器,该代码只是将请求通过响应返回。将下面的代码复制到一个单独的文件(例如“ server.js”)中,然后使用node命令(node server.js)启动该服务器。然后,您可以从单独的命令行分别在上面(节点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服务器后,此错误消失了


3

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


经过2天的搜索,然后看到您的评论,保存了我的一天
Ahmad Ali

1

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

mysql-ctl start

就我而言,它的工作


0

当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

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


4
这不是这里的问题。尝试提出请求时,他的连接被拒绝。
布拉德

0

Unhandled 'error' event所指的是不为传递错误的请求提供功能。没有此事件,节点进程将以错误结束,而不是正常失败并提供实际反馈。您可以在该request.write行之前设置事件以捕获任何问题:

request.on('error', function(err)
{
    console.log(err);
});

以下是更多示例:

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


0

在本地主机中发生相同的错误,我只是将mysql端口(从8080更改为本地主机mysql端口5506)。这个对我有用。


1
这不能为问题提供答案。
克里斯·塔帕伊

0

从其他命令行运行server.js,从其他命令行运行client.js


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.