如果我运行一个端口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();

当前回答

EADDRINUSE表示你的nodejs应用的端口已经被使用。

现在你已经杀死了在该端口上运行的进程/应用程序。 通过以下方式查找app的进程id:

-i tcp:3000

现在你会从这里得到进程id。 运行这个:

kill -9 进程 ID

其他回答

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

node server.js

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

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

您的应用程序已经在端口8080上运行。 使用此代码杀死端口并再次运行您的代码

sudo lsof -t -i tcp:8080 | xargs kill -9

真正帮助我的是:

killall -9 node

但是这会杀死一个系统进程。

ps ax

你可以检查它是否有效。

EADDRINUSE意味着listen()尝试绑定服务器的端口号已经在使用中。

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

如果你有另一个web服务器在这个端口上运行,你必须把node.js放在那个服务器后面,并通过它来代理它。

你应该像这样检查监听事件,看看服务器是否真的在监听:

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);

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

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

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

ps -aux | grep node

在获得进程id之后,执行

kill process_id