Dan*_*Fox 439 javascript node.js
如果我运行端口80的服务器,并尝试使用xmlHTTPrequest我得到此错误:Error: listen EADDRINUSE
如果我想要请求,当我在端口80上运行服务器时,为什么nodejs有问题呢?对于网络浏览器来说这不是问题:我可以在互联网上冲浪,而服务器正在运行.
服务器是:
net.createServer(function (socket) {
socket.name = socket.remoteAddress + ":" + socket.remotePort;
console.log('connection request from: ' + socket.remoteAddress);
socket.destroy();
}).listen(options.port);
Run Code Online (Sandbox Code Playgroud)
请求:
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();
Run Code Online (Sandbox Code Playgroud)
小智 535
对我有用的是:
killall -9 node
Run Code Online (Sandbox Code Playgroud)
但这会杀死一个系统进程.
同
ps ax
Run Code Online (Sandbox Code Playgroud)
你可以检查它是否有效.
ste*_*ewe 402
EADDRINUSE表示listen()尝试绑定服务器的端口号已在使用中.
因此,在您的情况下,必须已在端口80上运行服务器.
如果您在此端口上运行另一个Web服务器,则必须将node.js放在该服务器后面并通过它进行代理.
您应该检查这样的listening事件,看看服务器是否真的在听:
var http=require('http');
var server=http.createServer(function(req,res){
res.end('test');
});
server.on('listening',function(){
console.log('ok, server is running');
});
server.listen(80);
Run Code Online (Sandbox Code Playgroud)
Nob*_*ita 265
前面提到的killall -9 node,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)
Run Code Online (Sandbox Code Playgroud)
然后就做(ps - 实际上没有.请继续阅读下面):
kill -9 57385
你可以在这里阅读更多相关信息.
编辑:我今天正在阅读一个相当相关的主题,并偶然发现了这个有趣的线程,为什么我不应该kill -9进行处理.
通常,你应该在kill -9之前使用kill -15来为目标进程提供一个自我清理的机会.(进程无法捕获或忽略SIGKILL,但是它们可以并且经常捕获SIGTERM.)如果您没有给进程一个机会完成它正在进行的操作和清理,它可能会留下损坏的文件(或其他状态)一旦重新启动它将无法理解.
因此,如上所述,您最好使用以下方法终止上述过程:
kill -15 57385
编辑2:正如在这里的评论中所指出的那样,这个错误很多次是因为没有优雅地退出流程.这意味着,很多人使用CTRL + Z退出节点命令(或任何其他命令).停止正在运行的进程的正确方法是发出执行干净退出的CTRL + C命令.
以正确的方式退出流程将在关闭时释放该端口.这将允许您重新启动该过程,而无需在自己再次重新运行之前自行终止它.
Rob*_*ans 60
**在下行之前 - 请阅读答案.这是相关的!如果您要对此进行投票,请留下评论,为什么您认为它不相关.
只是抬头,Skype有时会在端口80上侦听,因此如果您尝试从Node.js或任何其他应用程序侦听端口80,则会导致此错误.
您可以通过访问选项并单击高级 - >连接 - >使用端口80(取消此操作)来关闭Skype中的行为

Yak*_*ein 36
您应该尝试终止正在侦听端口80的进程.
Killall会杀死所有运行的节点应用程序.你可能不想那样做.使用此命令,您只能杀死正在侦听已知端口的一个应用程序.
如果使用unix,请尝试以下命令:
sudo fuser -k 80/tcp
Run Code Online (Sandbox Code Playgroud)
Was*_*siF 23
错误原因:您正在尝试使用忙碌
port number
在Windows/Mac上有两种可能的解决方案可以解决此问题
视窗
1. netstat -ano | findstr :4200
2. taskkill /PID 5824 /F
Run Code Online (Sandbox Code Playgroud)
苹果电脑
你可以试试netstat
netstat -vanp tcp | grep 3000
Run Code Online (Sandbox Code Playgroud)
对于OSX El Capitan和更新版(或者如果您的netstat不支持-p),请使用lsof
sudo lsof -i tcp:3000
Run Code Online (Sandbox Code Playgroud)
如果这不能解决您的问题,Mac用户可以参考有关此问题的完整讨论在Mac上查找(和终止)进程锁定端口3000
视窗
set PORT=5000
Run Code Online (Sandbox Code Playgroud)
苹果电脑
export PORT=5000
Run Code Online (Sandbox Code Playgroud)
Pra*_*ain 17
lsof -i:3000;
kill -9 $(lsof -t -i:3000);
// 3000 is a your port
// This "lsof -i:3000;" command will show PID
kill PID
ex: kill 129393
Run Code Online (Sandbox Code Playgroud)
小智 16
您的应用程序已在该端口8080上运行.使用此代码终止端口并再次运行代码
sudo lsof -t -i tcp:8080 | xargs kill -9
Run Code Online (Sandbox Code Playgroud)
Eva*_*oll 15
另一件可能导致此错误的事情是同一节点代码中的两个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'));
});
Run Code Online (Sandbox Code Playgroud)
而且,它触发了这个错误.
hie*_*trq 14
这对我有用(我正在使用mac).运行此命令
lsof -PiTCP -sTCP:LISTEN
这将显示您的系统正在使用的端口列表.找到PID您的节点正在运行
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 17269 hientrq 16u IPv6 0xc42959c6fa30c3b9 0t0 TCP *:51524 (LISTEN)
node 17269 hientrq 19u IPv4 0xc42959c71ae86fc1 0t0 TCP localhost:1337 (LISTEN)
Run Code Online (Sandbox Code Playgroud)
并运行 kill -9 [YOUR_PID]
Tha*_*han 11
EADDRINUSE意味着端口(我们尝试在节点应用程序中侦听)已经被使用.为了克服这个问题,我们需要确定哪个进程正在运行该端口.
例如,如果我们试图在3000端口中监听我们的节点应用程序.我们需要检查该端口是否已被任何其他进程使用.
$sudo netstat -plunt |grep :3000
Run Code Online (Sandbox Code Playgroud)
上面的命令给出了以下结果.
tcp6 0 0 :::3000 :::* LISTEN 25315/node
Run Code Online (Sandbox Code Playgroud)
现在您获得了进程ID(25315),杀死了该进程.
kill -9 25315
Run Code Online (Sandbox Code Playgroud)
npm run start
Run Code Online (Sandbox Code Playgroud)
注意:此解决方案适用于linux用户.
小智 7
sudo kill $(sudo lsof -t -i:80)
强行杀死
sudo kill -9 $(sudo lsof -t -i:80)
使用cmd以上杀死特定端口,然后运行您的服务器
有一种方法可以使用任务管理器终止进程:
请注意,此解决方案仅适用于 Windows
转到任务管理器(或使用快捷方式Ctrl+ Shift+ Esc)
在“后台进程”上,找到“Node.js”进程并终止它们(右键单击它们并选择“结束任务”)
我有:
Error: listen EADDRINUSE: address already in use :::8000
Run Code Online (Sandbox Code Playgroud)
我试图寻找侦听端口 8000 的进程
,但没有成功 - 没有( sudo netstat -nlp | grep 8000)。
原来app.listen(8000)我的剧本里写了两遍。
我的假设是,干扰仅在尝试运行脚本时的短时间内发生,因此在错误之前和之后查找侦听端口的进程没有显示任何信息。
小智 5
当您要在其上运行应用程序的端口上运行任何进程时,就会出现此错误。
如何获取在该端口上运行的进程=>命令:sudo netstat -ap | grep:3000
输出:您将获得使用该端口的过程信息
tcp 0 0 IP地址:3000 : LISTEN 26869 / node
现在您可以杀死该进程sudo kill -9 26869
小智 5
在下面的命令中替换您的端口号
sudo lsof -t -i tcp:portNumber | xargs kill -9
Run Code Online (Sandbox Code Playgroud)
EADDRINUSE 表示您的 nodejs 应用程序的端口已在使用中。
lsof -i tcp:3000
kill -9 进程ID
| 归档时间: |
|
| 查看次数: |
589212 次 |
| 最近记录: |