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

当前回答

这发生在我身上是因为我的服务器在另一个终端窗口中运行。关闭连接解决了问题。

其他回答

我以前(在节点中)用http看到过这个错误。我记得,这个问题与没有初始化httpClient或在httpClient创建和/或url请求中设置错误的选项有关。

错误原因:您正在尝试使用繁忙的端口号

Windows/Mac有两种可能的解决方案

空闲当前使用的端口号 为当前程序选择另一个端口号

1. 空闲端口号

窗户

1. netstat -ano | findstr :4200
2. taskkill /PID 5824 /F

Mac

你可以试试netstat

netstat -vanp tcp | grep 3000

对于OSX El Capitan和更新版本(或者如果你的netstat不支持-p),使用lsof

sudo lsof -i tcp:3000

如果这不能解决您的问题,Mac用户可以参考关于此问题的完整讨论,查找(并杀死)Mac上的进程锁定端口3000

2. 修改端口号?

窗户

set PORT=5000

Mac

export PORT=5000

似乎有另一个Node ng服务进程正在运行。在你的控制台(Linux/Mac)中输入以下内容进行检查:

ps aux|grep node

然后用:

kill -9 <NodeProcessId>

或替代使用

ng serve --port <AnotherFreePortNumber>

在你选择的自由港口为你的项目服务。

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

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

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

ps -aux | grep node

在获得进程id之后,执行

kill process_id

当我们意外地在同一个实例中有两个本地Express环境指向同一个端口时,得到此错误。

如果你已经找到了这些答案,我希望这将有助于解决你的问题。