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

当前回答

NOOB错误修复:我是Node.js的新手,并设置了一个监听端口8080的web服务器。我遇到EADDRINUSE错误。我尝试了所有不同的“杀死-9节点”迭代,并一直得到,“节点:没有发现进程”

问题是,我在调用http.listen(8080);在同一段代码中出现了两次。所以第一次它实际上工作得很好,第二次它抛出一个错误。

如果在尝试关闭端口时得到“no process found”响应,请尝试检查以确保只打开一次端口。

其他回答

真正帮助我的是:

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

解决方法:

1:需要使用以下命令终止进程。

pm2 kill <PROCESS_ID>

2:执行如下命令重新启动服务。

启动app.js——name“servername”

3:执行以下命令检查服务器状态。

pm2列表

我有:

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

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

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

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

在控制器环境下,你可以使用:

在运行脚本之前,Pkill节点应该完成这项工作。

请记住,这个命令会杀死所有的节点进程,如果你有一个容器只运行一个实例,这可能是正确的,如果你有这样的环境,你可以保证。

在任何其他场景中,我建议使用命令终止通过编程方式查找的某个进程id或名称。比如,如果你的进程被调用node-server-1你可以执行pkill node-server-1。

这个资源可能有助于理解: https://www.thegeekstuff.com/2009/12/4-ways-to-kill-a-process-kill-killall-pkill-xkill/