如果我运行一个端口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();
对于windows 10上的其他人来说,node是localhost,端口是3500,而不是80…
不奏效的:
killall ? command not found
ps -aux | grep 'node' ? ps: user x unknown
显示信息但仍然不起作用的:
ps -aef | grep 'node'
ps ax
kill -9 61864
哪些方法有效:
Git Bash或Windows上的Powershell
net -a -o | grep 3500 (whatever port you are looking for)
注意PID(最右边)
我不能让所有人都去工作……所以
打开任务管理器
在进程选项卡上,右键单击名称或任何列,并选择包含PID
按PID排序,然后右键单击右PID,然后单击结束任务。
现在,在windows上不那么有趣的练习之后,我意识到我可以使用任务管理器,找到Node引擎,然后结束它。
仅供参考,我使用Visual Studio代码在端口3500上运行节点,我在VS代码中使用Git Bash shell。我已经用Ctrl + C优雅地退出了,但有时这并不能杀死它。我不想改变我的端口或重新启动,所以这是有效的。希望它能帮助到其他人。否则就是我自己的文档。
上文提到的kill -9节点,由Patrick建议,正如预期的那样工作并解决了问题,但你可能想要阅读这个回答的编辑部分,关于为什么kill -9可能不是最好的方法。
最重要的是,您可能希望以单个进程为目标,而不是盲目地杀死所有活动进程。
在这种情况下,首先获取该端口上运行的进程的进程ID (PID)(例如8888):
Lsof -i tcp:8888
这将返回如下内容:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 57385 You 11u IPv6 0xac745b2749fd2be3 0t0 TCP *:ddi-tcp-1 (LISTEN)
然后就去做(ps -实际上不做。请继续阅读下文):
杀死-9 57385
你可以在这里读到更多。
编辑:我今天正在阅读一个相当相关的主题,偶然发现了这个有趣的帖子,关于为什么我不应该杀死-9个进程。
通常,应该在kill -9之前使用kill -15,以便给目标进程一个自我清理的机会。(进程不能捕获或忽略SIGKILL,但它们可以并且经常捕获SIGTERM。)如果您不给进程一个机会来完成它正在做的事情和清理,它可能会留下损坏的文件(或其他状态),一旦重新启动,它将无法理解。
因此,如前所述,你应该更好地杀死上面的进程:
击杀-15 57385
编辑2:正如这里的评论多次指出的那样,此错误是由于没有优雅地退出进程造成的。这意味着,许多人使用CTRL+Z退出节点命令(或任何其他命令)。停止正在运行的进程的正确方法是发出CTRL+C命令,该命令执行干净的退出。
以正确的方式退出进程将在关闭时释放该端口。这将允许您重新启动进程,而不必在重新运行它之前自己杀死它。