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

当前回答

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

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

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

对于windows

netstat -ano -p tcp |find "80"

linux

 sudo lsof -i -P -n

其他回答

如果你在nodejs中使用docker image,只需停止容器:

获取nodejs的CONTAINER_ID

docker ps

停止它

docker stop CONTAINER_ID

或者如果你使用docker compose

docker compose stop nodejs_service_name

Windows在开源方面总是很棘手。

更改端口就可以了

node-inspector --web-port=8099

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

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

尝试这两个命令,它将停止所有节点进程。

killall 9 node
pkill node
npm start 

当您希望在某个端口上运行应用程序时,将出现此错误。

如何得到哪个进程运行在该端口=> 命令: Sudo netstat -ap | grep:3000

输出:您将获得正在使用该端口的进程信息

tcp 00 IPaddress:3000: LISTEN 26869/node

现在你可以终止这个过程 须藤杀-9 26869