Node.js错误:连接ECONNREFUSED

ian*_*ian 63 javascript node.js

我是节点新手并在一个简单的教程中遇到此错误.

我在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)
Run Code Online (Sandbox Code Playgroud)

app.js:

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

makeRequest("Here's looking at you, kid");
makeRequest("Hello, this is dog");
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

use*_*009 42

当你正在调用的服务器拒绝连接时,你很可能正在努力使用node.js.试试这个:

process.on('uncaughtException', function (err) {
    console.log(err);
}); 
Run Code Online (Sandbox Code Playgroud)

这可以使您的服务器保持运行,还可以为您提供附加调试器的位置,并寻找更深层次的问题.

  • 在未捕获的异常之后保持服务器运行是一件危险的事情.您不知道异常是否使您的服务器处于预期状态.杀死服务器并让另一个进程重新启动它会更安全(显然,记录异常). (12认同)
  • 这取决于你想要完成什么.我正在编写一个监控应用程序,这对于保持并继续前进至关重要.OP似乎正在努力解决问题所在.所有其他答案都是可能导致此错误的特定问题.作为调试步骤,在深入了解真正的问题之前,几乎总是需要上述步骤.由于一次故障导致您的服务器死机,导致所有其他客户端呼叫开始失败,这对我来说也很奇怪吗? (4认同)
  • 一般来说,在黑暗中捕获所有异常并不是一个好主意。看看[这个答案](http://stackoverflow.com/a/7590530/2295964)。 (3认同)

小智 13

我刚刚遇到了这个问题,在寻找答案后,我发现了另一个 stackoverflow 线程:ECONNREFUSED error with node.js that do not come in other client

那里提供的解决方案对我来说就像一个魅力,似乎nodeJS在访问本地主机dns时遇到一些问题,但是切换到127.0.0.1工作得很好。

  • 我很恼火,这对我有用......你对这个问题的喜欢的答案编号是unteen:/ (2认同)

小智 9

我和ghost和heroku有同样的问题.

heroku config:set NODE_ENV=production 
Run Code Online (Sandbox Code Playgroud)

解决了!

检查您的配置并确认服务器正在运行.

  • 你能解释为什么这可以解决这个问题吗? (3认同)

Jak*_*lik 8

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


pas*_*lus 6

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

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

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

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


小智 5

当您运行上面的代码时,您需要在端口8080上运行服务器,它只是通过响应返回请求.将下面的代码复制到一个单独的文件(比如'server.js')并使用node命令(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...');
Run Code Online (Sandbox Code Playgroud)


小智 5

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


rah*_*a95 3

当 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
Run Code Online (Sandbox Code Playgroud)

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

  • 这不是问题所在。当他尝试提出请求时,连接被拒绝。 (6认同)