use*_*690 70 javascript port node.js npm
我一直在使用node.js项目几个星期,它一直很好用.通常我使用'npm start'来运行我的应用程序,并在浏览器上的localhost,端口3000上查看它.
今天,我在使用npm start时开始出现以下错误:
Server started on port 3000
Port 3000 is already in use
Run Code Online (Sandbox Code Playgroud)
我检查了资源监视器,我没有在端口3000上运行其他进程.为什么我会收到此错误消息?
在我的app.js中,我有以下代码来设置端口......这是不正确的?它之前工作正常,所以我不确定我做错了什么.
// Set Port
app.set('port', (process.env.PORT || 3000));
app.listen(app.get('port'), function() {
console.log('Server started on port '+app.get('port'));
});
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助!
编辑:我已经尝试运行netstat和TCPView来检查使用该端口的进程,但没有使用该端口.我也试过重启我的笔记本电脑,但我仍然得到同样的错误.
Pen*_*Liu 228
或许你可以以此为参考。这个单一的命令行可以终止在给定端口上运行的进程。
npx kill-port 3000
Run Code Online (Sandbox Code Playgroud)
杀死多个端口。
npx kill-port 3000 8080 4200
Run Code Online (Sandbox Code Playgroud)
Ani*_*ngh 172
您可以搜索如何终止该进程.
对于Linux/Mac OS搜索(sudo)在终端中运行:
$ lsof -i tcp:3000
$ kill -9 PID
Run Code Online (Sandbox Code Playgroud)
在Windows上:
netstat -ano | findstr :3000
tskill typeyourPIDhere
Run Code Online (Sandbox Code Playgroud)
改变(sudo) run
为tskill
git bash
tec*_*ura 22
有时会发生这种情况,正如@sova提出的那样,有时EADDR会在我身上发生.通常,有一个终端窗口隐藏在仍在运行应用程序的后台.这对我来说也是对的.
它发生了,当你长时间打开终端,是的,你是对的,你已经停止了这个过程.但有时它并没有停留在后台.所以最好的解决方案是关闭终端并重新启动它.它将解决您的问题.因为在我的情况下,它的工作原理.
也,
sudo lsof -i:<PORT_NO>
Run Code Online (Sandbox Code Playgroud)
关闭当前时间的实例但无法在后台停止该过程.所以有一次,
sudo kill <PID>
Run Code Online (Sandbox Code Playgroud)
工作,但是当我们更新我们的代码并保存时,这个问题再次发生,就像Nodemon一样.
因此退出终端将解决问题.要么
killall -9 node
Run Code Online (Sandbox Code Playgroud)
Afe*_*een 19
杀死一个拥有 3000 端口的进程
首先,让我们看看如何杀死一个打开了端口的进程。
使用 lsof 命令,我们可以检索具有给定端口的 PID:
$ lsof -i :3000 -t
12345
Run Code Online (Sandbox Code Playgroud)
然后我们可以通过执行以下操作来终止这个进程:
$ kill 12345
Run Code Online (Sandbox Code Playgroud)
让我们把它变成一个单行:
lsof -i 3000 -t | xargs kill
Run Code Online (Sandbox Code Playgroud)
如果您使用环境变量来设置服务器端口,我们可以指定它而不是硬编码我们的值:
lsof -i ${PORT} -t | xargs kill
Run Code Online (Sandbox Code Playgroud)
最后,如果未设置环境变量,我们可以默认使用端口 3000:
lsof -i ${PORT:-3000} -t | xargs kill
Run Code Online (Sandbox Code Playgroud)
让 nodemon 执行钩子
Nodemon 允许您通过 nodemon.json 配置文件设置事件挂钩:
{
"events": {
"crash": "sh -c 'lsof -i :${PORT:-3000} -t | xargs kill'"
}
}
Run Code Online (Sandbox Code Playgroud)
这将导致 nodemon${PORT:-3000} -t | xargs
在您的应用程序崩溃时执行 sh -c 'lsof -i : kill 命令,从而杀死它产生的保持端口打开的子进程。
或者你可以试试这个
fuser -k PORT-NO/tcp
Run Code Online (Sandbox Code Playgroud)
例如:
fuser -k 3000/tcp
Run Code Online (Sandbox Code Playgroud)
你也可以试试这个
fuser -n tcp -k PORT-NO
Run Code Online (Sandbox Code Playgroud)
例如:
fuser -n tcp -k 3000
Run Code Online (Sandbox Code Playgroud)
Mah*_*yar 13
我有同样的问题.(以下步骤在Windows 10上正常工作):
现在你可以跑了npm start
.
希望它能帮到你.
May*_*yur 13
自从找到解决方案后,我今天遇到了同样的问题。
问题是因为即使重新启动,节点服务也在后台运行nodemon
。
我已经浏览了很多答案,但都带有多个命令。我为我的案例找到了一个简单的命令
sudo pkill node
Run Code Online (Sandbox Code Playgroud)
这将终止节点中所有正在运行的进程,并且您nodemon
将开始按预期工作。
Sal*_*zid 11
killall -9 node
Run Code Online (Sandbox Code Playgroud)
当您进行远程开发时,上述命令可以退出 vs 代码 ssh 连接并终止所有可能导致问题的节点进程,特别是如果您在生产中使用 node 有一些应用程序,则有一种更好的方法可以通过使用 netstat 来获取所有节点进程使用他们正在使用的端口,然后通过 PID 杀死你想要的唯一一个
netstat -lntp | grep node
Run Code Online (Sandbox Code Playgroud)
您将获得所有节点进程
tcp6 0 0 :::5744 :::* LISTEN 3864/node
Run Code Online (Sandbox Code Playgroud)
然后当您获得 PID (3864) 时,只需通过 PID 终止进程
kill -9 PID
Run Code Online (Sandbox Code Playgroud)
或者
kill -HUP PID
Run Code Online (Sandbox Code Playgroud)
我在NodeJS上使用带有nodemon 的快速服务器。我收到以下消息,似乎是一个错误:
$ node ./bin/www
Port 3000 is already in use
Run Code Online (Sandbox Code Playgroud)
有一个通用的解决方案,如果您终止所有节点服务器连接,您可以在 package.json 文件中添加以下代码:
"scripts": {
"start": "node ./bin/www",
"stop": "taskkill -f -im node.exe"
},
Run Code Online (Sandbox Code Playgroud)
此外,我在 Win 10 x64 上找到了几个解决方案 windows command 和 bash。
我所有的笔记都在这里:
# 终止所有 NodeJS 服务器连接
$ taskkill -f -im node.exe
SUCCESS: The process "node.exe" with PID 14380 has been terminated.
SUCCESS: The process "node.exe" with PID 18364 has been terminated.
SUCCESS: The process "node.exe" with PID 18656 has been terminated.
Run Code Online (Sandbox Code Playgroud)
# 示例:打开 Windows 任务管理器并查看 Windows 上的“node.exe”PID 编号
>> Command Line
$ netstat /?
$ netstat -a -n -o
$ netstat -ano
Run Code Online (Sandbox Code Playgroud)
# 通过端口号杀死 Windows 中的进程(示例)
求助:
$ taskkill /?
$ tskill /?
Run Code Online (Sandbox Code Playgroud)
代码 1:
$ taskkill -pid 14228
ERROR: The process with PID 14228 could not be terminated.
Reason: This process can only be terminated forcefully (with /F option).
Run Code Online (Sandbox Code Playgroud)
代码 2:
$ taskkill -f -pid 14228
SUCCESS: The process with PID 14228 has been terminated.
Run Code Online (Sandbox Code Playgroud)
代码 3:
$ tskill 14228
Run Code Online (Sandbox Code Playgroud)
# 查看特定端口的命令行
在 cmd 中:
$ netstat -ano | find "14228"
Run Code Online (Sandbox Code Playgroud)
在 bash 中:
$ netstat -ano | grep "14228" or $ netstat -ano | grep 14228
Run Code Online (Sandbox Code Playgroud)
# 使用“tasklist”命令查找node.exe
在 cmd 中:
$ tasklist | find "node"
Run Code Online (Sandbox Code Playgroud)
在 bash 中:
$ tasklist | grep node
$ tasklist | grep node.exe
node.exe 14228 Console 2 48,156 K
node.exe 15236 Console 2 24,776 K
node.exe 19364 Console 2 24,428 K
Run Code Online (Sandbox Code Playgroud)
小智 8
打开命令提示符并首先运行以下命令:
netstat -ano | findstr :7001
Run Code Online (Sandbox Code Playgroud)
然后运行这个命令:
taskkill /PID 2820 /F
Run Code Online (Sandbox Code Playgroud)
这是一个老问题,但似乎没有一个回答者真正读过它。我遇到了同样的问题,问题是 Windows 有时会保留端口块并阻止您使用它们。该端口不会通过 netstat 或任何其他工具显示。你可以在这里读到它:
本质上,你可以告诉 Windows 让你的端口保持不变:
netsh int ipv4 add excludedportrange tcp startport=3000 numberofports=1 store=persistent
Run Code Online (Sandbox Code Playgroud)
这有时会发生在我身上,正在使用 EADDR。通常有一个隐藏在后台的终端窗口仍在运行应用程序。您可以在终端窗口中使用 ctrl+C 停止进程。
或者,您可能由于复制/意大利面而多次监听端口 =)
我见过同样的事情,并尝试了以上所有建议,但均未成功。以下是为我解决此问题的步骤:-关闭wifi-npm启动(应该可以)-开启wifi
我不确定是什么根本问题,但是这为我解决了。
小智 6
当命令中没有列出任务时会发生这种情况
lsof -i:3000
Run Code Online (Sandbox Code Playgroud)
但仍然会出现错误
Error: listen EADDRINUSE: address already in use 0.0.0.0:3000
Run Code Online (Sandbox Code Playgroud)
原因之一是在 Nginx conf.d 中检查没有任何配置正在侦听端口 3000
port problem
我最近在win10上遇到一个奇怪的问题,无法启动服务器进程监听8080端口,我将其更改为18080,然后就可以了,但是过了一段时间,同样的问题又出现了。但我找不到任何进程使用该端口,我已经尝试过currpots
,netstat
但它们都不起作用,我尝试通过以下方式打开端口
python -m http.server 18080
python -m http.server 18081
python -m http.server 18082
python -m http.server 18083
python -m http.server 18084
...
Run Code Online (Sandbox Code Playgroud)
,大多数都显示类似的消息“端口已在使用中”,幸运的是,我搜索并找到了原因。经过
netsh interface ipv4 show excludedportrange protocol=tcp
Run Code Online (Sandbox Code Playgroud)
可以看到有些端口被排除使用,通过这些端口没有打开和监听。并由
net stop winnat
Run Code Online (Sandbox Code Playgroud)
大多数排除的端口被释放,这些端口就可以使用了。
归档时间: |
|
查看次数: |
107644 次 |
最近记录: |