如何修复错误:在使用NodeJS时收听ADDRINUSE?

2022-08-29 23:03:52

如果我运行端口为80的服务器,并且我尝试使用XMLHttpRequest,则会出现以下错误:Error: listen EADDRINUSE

为什么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();

答案 1

真正对我有帮助的是:

killall -9 node

但这会扼杀系统进程。

ps ax

您可以检查它是否有效。


答案 2

EADDRINUSE表示尝试将服务器绑定到的端口号已在使用中。listen()

因此,在您的情况下,必须已经在端口80上运行服务器。

如果在此端口上运行另一个Web服务器,则必须将node.js放在该服务器后面并通过它进行代理。

您应该检查这样的事件,以查看服务器是否确实在侦听:listening

var http=require('http');

var server=http.createServer(function(req,res){
    res.end('test');
});

server.on('listening',function(){
    console.log('ok, server is running');
});

server.listen(80);