[英]Node.js Error: connect ECONNREFUSED
我是节点的新手,在一个简单的教程中遇到了这个错误。
我在 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)
应用程序.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;
每当您调用的服务器拒绝连接时,您很有可能正在为 node.js 死机而苦苦挣扎。 尝试这个:
process.on('uncaughtException', function (err) {
console.log(err);
});
这使您的服务器保持运行,并为您提供一个附加调试器并寻找更深层次问题的地方。
您正在尝试连接到 localhost:8080 ... 是否有任何服务在您的 localhost 和此端口上运行? 如果不是,则拒绝连接,从而导致此错误。 我建议先检查 localhost:8080 上是否有任何东西在运行。
我对ghost和heroku有同样的问题。
heroku config:set NODE_ENV=production
解决了!
检查服务器正在运行的配置和环境。
当您运行上面的代码时,您需要在端口 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...');
有时,如果您的代码中有任何数据库连接但您尚未启动数据库服务器,则可能会发生这种情况。
我的情况是我有一些代码可以与 mongodb 连接
mongoose.connect("mongodb://localhost:27017/demoDb");
在我使用命令mongod启动 mongodb 服务器后,此错误消失了
如果您在 MEAN (Mongo-Express-AngularJS-Node) 堆栈上,请先运行 mongod,此错误消息将消失。
ECONNREFUSED
错误意味着无法与目标服务建立连接(在您的情况下为localhost:8080
)。 检查您的服务在端口 8080 上运行。
要了解有关 node.js 错误的更多信息,请参阅此文档。
当 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
。
检查在终端中启动 mysql。 使用以下命令
mysql-ctl start
就我而言,它有效
从不同的命令行运行 server.js,从不同的命令行运行 client.js
对我来说,这是由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
没有这样的“补丁”。
这简直太疯狂了……希望我的回复能为您节省一些时间,我已经花了几天时间来调试它。
Unhandled 'error' event
是指未向请求提供函数以传递错误。 如果没有这个事件,节点进程会以错误结束,而不是优雅地失败并提供实际反馈。 您可以在request.write
行之前设置事件以捕获任何问题:
request.on('error', function(err)
{
console.log(err);
});
更多示例如下:
https://nodejs.org/api/http.html#http_http_request_options_callback
我是 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)
应用程序.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;
有一个类似的问题,原来打印的监听端口与实际不同。 请求字符串或侦听函数中的拼写错误可能会使目标服务器看起来不存在。
我刚刚遇到了这个问题,在搜索了一些答案后,我发现了另一个 stackoverflow 线程: ECONNREFUSED error with node.js that not occur in other clients
那里提供的解决方案对我来说就像一个魅力,似乎 nodeJS 在访问 localhost dns 时遇到了一些问题,但是切换到 127.0.0.1 工作得很好。
在我的情况下,我忘记npm start
节点应用程序
如果您使用的 NodeJs 版本 > 17,请尝试降级以使用 NodeJs 16。在 17 上,默认情况下,调试器绑定 IP 在 IPv6 上,有时您的 IDE 可能无法附加到它
对我来说,当 my.env 文件被错误命名为 .env.local 时,就会发生这种情况
检查 API 时,我在我的开发环境中使用 Postman 遇到了同样的问题。 我从字面上搜索了所有答案都来自谷歌,但无济于事。
解决方案:我刚刚转向“失眠”(邮递员的替代品),它工作得很好。 希望这种解决方法可能会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.