如果我运行一个端口80的服务器,我尝试使用XMLHttpRequest,我得到这个错误

为什么NodeJS会有问题,如果我想做一个请求,而我在端口80上运行一个服务器?对于网络浏览器来说,这不是问题:我可以在服务器运行时上网。

服务器为:

  net.createServer(function (socket) {
    socket.name = socket.remoteAddress + ":" + socket.remotePort;
    console.log('connection request from: ' + socket.remoteAddress);
    socket.destroy();
  }).listen(options.port);

请求是:

var xhr = new XMLHttpRequest();

xhr.onreadystatechange = function() {
    sys.puts("State: " + this.readyState);

    if (this.readyState == 4) {
        sys.puts("Complete.\nBody length: " + this.responseText.length);
        sys.puts("Body:\n" + this.responseText);
    }
};

xhr.open("GET", "http://mywebsite.com");
xhr.send();

当前回答

另一个可能产生此错误的是相同节点代码中的两个HTTP服务器。我正在更新一些Express 2到Express 3的代码,然后有了这个…

http.createServer(app).listen(app.get('port'), function(){            
  console.log('Express server listening on port ' + app.get('port')); 
});        

// tons of shit.

http.createServer(app).listen(app.get('port'), function(){            
  console.log('Express server listening on port ' + app.get('port')); 
});                                                                   

它触发了这个错误。

其他回答

EADDRINUSE表示端口(我们在节点应用程序中尝试侦听的端口)已经被使用。为了克服这个问题,我们需要确定哪个进程正在使用该端口运行。

例如,如果我们试图在3000端口监听节点应用程序。我们需要检查该端口是否已经被任何其他进程使用。

步骤1:

$sudo netstat -plunt |grep :3000

上面的命令给出下面的结果。

tcp6       0      0 :::3000                 :::*                    LISTEN      25315/node

步骤2:

现在您获得了进程ID(25315),杀死该进程。

kill -9 25315

步骤3:

npm run start

注意:此解决方案适用于linux用户。

错误:listen EADDRINUSE表示要分配/绑定到应用服务器的端口已经在使用中。您可以为您的应用程序分配另一个端口。

或者如果你想给应用程序分配相同的端口。然后杀死在你想要的端口上运行的应用程序。

对于一个节点应用程序,你可以尝试的是,找到节点应用程序的进程id:

ps -aux | grep node

在获得进程id之后,执行

kill process_id

我有:

Error: listen EADDRINUSE: address already in use :::8000

我试图寻找侦听端口8000的进程 没有运气-没有(sudo netstat -nlp | grep 8000)。

结果我在我的脚本中写了两次app.listen(8000)。

我的假设是,在尝试运行脚本时,干扰只在很短的时间内发生,因此在错误前后查找侦听端口的进程不会显示任何干扰。

我也有同样的问题,我只是关闭终端并打开一个新终端并运行

node server.js

一次。这对我来说是有效的,有时只需要等待几秒钟,直到它再次工作。

但这只适用于开发人员机器,而不是服务器控制台。

EADDRINUSE翻译过来就是“你试图发出app.listen()的端口正在被其他程序使用”。您可以使用这样的脚本来检查端口是否正在使用,然后在app.listen()中更改端口。

var net = require('net');
var errors = ['EADDRINUSE'];    
var isUsed = function(port) {
    var tester = net.createServer()
        .once('error', function (err) {
          if (!errors.includes(err.code)) {
           console.log("Port is in use, change the port.");
          }
        })
        .once('listening', function() {
            tester.once('close', function() { 
                console.log("You are good to go."); 
            })
            .close()
        })
        .listen(port);
}

您还可以在errors数组中添加其他错误,以检查所有类型的错误。