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

当前回答

只是一个头,Skype有时会监听端口80,因此导致这个错误,如果你试图从Node.js或任何其他应用程序监听端口80。

你可以在Skype中通过访问选项并单击高级->连接->使用端口80(取消勾选)来关闭该行为

P.S.在做了这个改变后,不要忘记重新启动Skype!

其他回答

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

查看哪些进程正在使用该端口也很有用。

对于macOS,我从这篇文章中发现,AirPlay使用端口5000,所以即使你使用这里列出的解决方案杀死它,它也会再次使用端口5000。快速搜索谷歌,查看哪些常见应用程序或进程正在使用导致错误的端口。

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数组中添加其他错误,以检查所有类型的错误。

Sudo kill $(Sudo lsof -t:80)

对于武力杀伤

Sudo kill -9 $(Sudo lsof -t:80)

使用上述CMD杀死特定端口,然后运行您的服务器

有一种方法可以使用任务管理器终止进程:

注意,此解决方案仅适用于Windows

进入任务管理器(或使用快捷键Ctrl + Shift + Esc) 在“后台进程”中,找到“Node.js”进程并终止它们(右键单击它们并选择“结束任务”)

现在你应该可以重新开始了