如果我运行一个端口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();
上文提到的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命令,该命令执行干净的退出。
以正确的方式退出进程将在关闭时释放该端口。这将允许您重新启动进程,而不必在重新运行它之前自己杀死它。
上文提到的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命令,该命令执行干净的退出。
以正确的方式退出进程将在关闭时释放该端口。这将允许您重新启动进程,而不必在重新运行它之前自己杀死它。