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

当前回答

您应该尝试杀死正在端口80上侦听的进程。

Killall将杀死所有正在运行的节点应用程序。你可能不想这么做。使用这个命令,你只能杀死一个正在监听一个已知端口的应用程序。

如果使用unix,请尝试以下命令:

sudo fuser -k 80/tcp    

其他回答

这个选项对我来说是有效的:

Run:

ps -ax | grep node

你会得到这样的东西:

 8078 pts/7    Tl     0:01 node server.js
 8489 pts/10   S+     0:00 grep --color=auto node    
 kill -9 8078

另一个可能产生此错误的是相同节点代码中的两个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')); 
});                                                                   

它触发了这个错误。

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

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

实际上,你正在尝试运行在一个端口上,这个端口实际上被一些其他服务占用(通常是其他web服务器,如apache, iis等)。

找出哪个服务正在使用该端口 停止它并重新启动节点服务器

或者换一个端口,比如8080、5000……

对于windows

netstat -ano -p tcp |find "80"

linux

 sudo lsof -i -P -n

如果你想解决这个问题

$ node server events.js:141 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE :::3000 at Object.exports._errnoException (util.js:907:11) at exports._exceptionWithHostPort (util.js:930:20) at Server._listen2 (net.js:1250:14) at listen (net.js:1286:10) at Server.listen (net.js:1382:5) at EventEmitter.listen (C:\sendbox\mean\node_modules\express\lib\application .js:617:24) at Object. (C:\sendbox\mean\server.js:28:5) at Module._compile (module.js:409:26) at Object.Module._extensions..js (module.js:416:10) at Module.load (module.js:343:32)

将端口号更改为8000