我已经使用 node.js 项目工作了几个星期,它一直运行良好。通常,我使用 npm start
运行我的应用程序并在 localhost 端口 3000 上的浏览器中查看它。
今天,我在使用 npm start 时开始出现以下错误:
Server started on port 3000
Port 3000 is already in use
我检查了资源监视器,但在端口 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'));
});
谢谢您的帮助!
编辑:
我尝试运行 netstat 和 TCPView 来检查哪个进程正在使用该端口,但没有使用该端口。我也尝试重新启动我的笔记本电脑,但我仍然得到同样的错误。
netstat
,或者使用 telnet 等效项(例如 PuTTY)连接到 localhost:3000。
app.listen()
语句,另一个 .listen()
也试图在该端口上启动服务器。第一个有效,第二个报告错误。在您的代码中搜索 .listen
。
您可以搜索如何终止该进程。
对于 Linux/Mac 操作系统,在终端中搜索 (sudo) run
:
$ lsof -i tcp:3000
$ kill -9 PID
在 Windows 上:
netstat -ano | findstr :3000
tskill typeyourPIDhere
在 git bash 中将 tskill
更改为 taskkill
也许你可以以此作为参考。这个单一的命令行可以杀死在给定端口上运行的进程。
npx kill-port 3000
https://i.stack.imgur.com/uqjmN.png
杀死多个端口。
npx kill-port 3000 8080 4200
npx kill-port 3000
为我工作。谢谢@Penny
有时它会发生,正如@sova 建议的那样这有时会发生在我身上,正在使用 EADDR。通常有一个终端窗口隐藏在后台仍在运行应用程序。这对我来说也是正确的。
发生这种情况时,当您长时间打开终端时,是的,您是对的,您已经停止了该过程。但有时它并没有在后台停止。所以最好的解决方案是关闭终端并重新启动它。它将解决您的问题。因为在我的情况下它有效。
还,
sudo lsof -i:<PORT_NO>
暂时关闭实例,但无法在后台停止进程。所以有一次,
sudo kill <PID>
可以,但是当我们更新代码并保存时,再次出现这个问题,就像 Nodemon 一样。
所以退出终端就可以解决问题了。或者
killall -9 node
killall -9 node
之后,我能够在本地运行服务器。
killall -9 node
成功了。谢谢!
我有同样的问题。 (以下步骤在 Windows 10 上运行良好):
打开任务管理器(按 Ctrl+Alt+Delete)选择“进程选项卡”搜索“Node.js:服务器端 JavaScript”选择它并单击“结束任务”按钮
现在您可以运行 npm start
。
希望它可以帮助你。
我也遇到了同样的问题。解决的最佳方法是(对于 Windows):
转到任务管理器。滚动并找到一个名为的任务流程。 Node.js:服务器端 JavaScript 结束这个特定任务。
给你!现在做 npm start ,它会像以前一样工作!
对于 Windows,任务管理器肯定会显示正在运行的节点进程。尝试杀死该进程,它将解决问题。
杀死拥有端口 3000 的进程
首先,让我们看看如何杀死一个打开了端口的进程。
使用 lsof 命令,我们可以检索具有给定端口的 PID:
$ lsof -i :3000 -t
12345
然后我们可以通过这样做来终止这个进程:
$ kill 12345
让我们把它变成一个单行:
lsof -i 3000 -t | xargs kill
如果您使用环境变量来设置服务器端口,我们可以指定它而不是硬编码我们的值:
lsof -i ${PORT} -t | xargs kill
最后,如果未设置环境变量,我们可以默认使用端口 3000:
lsof -i ${PORT:-3000} -t | xargs kill
让 nodemon 执行钩子
Nodemon 允许您通过 nodemon.json 配置文件设置事件挂钩:
{
"events": {
"crash": "sh -c 'lsof -i :${PORT:-3000} -t | xargs kill'"
}
}
这将导致 nodemon 在您的应用程序崩溃时执行 sh -c 'lsof -i :${PORT:-3000} -t | xargs
kill 命令,从而杀死它产生的保持端口打开的子进程。
或者你可以试试这个
fuser -k PORT-NO/tcp
例如:
fuser -k 3000/tcp
你也可以试试这个
fuser -n tcp -k PORT-NO
例如:
fuser -n tcp -k 3000
lsof -i :3000 -t
返回的进程 =\
fuser -k port-number/tcp
killall -9 node
上面的命令可以在您远程开发时退出 vs code ssh 连接并杀死所有可能导致问题的节点进程,特别是如果您有一些使用节点的生产应用程序,有一个更好的方法是使用 netstat 获取所有节点使用他们正在使用的端口进行进程,然后通过 PID 杀死你想要的唯一一个
netstat -lntp | grep node
您将获得所有节点进程
tcp6 0 0 :::5744 :::* LISTEN 3864/node
然后当你得到 PID (3864) 时,只需按 PID 杀死进程
kill -9 PID
或者
kill -HUP PID
我在 NodeJS 上使用带有 nodemon 的 express 服务器。我收到以下消息,这似乎是一个错误:
$ node ./bin/www
Port 3000 is already in use
有一个通用的解决方案,如果你终止所有节点服务器连接,你可以在你的 package.json 文件中添加这个代码:
"scripts": {
"start": "node ./bin/www",
"stop": "taskkill -f -im node.exe"
},
此外,我在 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.
示例:打开 Windows 任务管理器,查看 Windows 上的“node.exe”PID 号
>> Command Line
$ netstat /?
$ netstat -a -n -o
$ netstat -ano
按端口号杀死 Windows 中的进程(示例)
求助:
$ taskkill /?
$ tskill /?
代码 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).
代码 2:
$ taskkill -f -pid 14228
SUCCESS: The process with PID 14228 has been terminated.
代码 3:
$ tskill 14228
# 查看特定端口的命令行
在命令中:
$ netstat -ano | find "14228"
在 bash 中:
$ netstat -ano | grep "14228" or $ netstat -ano | grep 14228
# 使用“tasklist”命令查找node.exe
在命令中:
$ tasklist | find "node"
在 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
netstat -ano | find "14228"
并希望将其与 taskkill /PID xxx
一起使用。我无法使用 |
或 >
来管道它。它以错误的格式错误向我抛出。我错过了什么?它们是两个:netstat -ano | find "14228" | taskkill /PID xxx
或 netstat -ano | find "14228" > taskkill /PID xxx
。我试过这个netstat -ano | find "14228" | ( set /P var= && set var ) > taskkill /PID ........
我见过同样的事情,并尝试了上面的所有建议,但没有成功。以下是为我解决问题的步骤: - 关闭 wifi - npm start(这应该可以) - 打开 wifi
我不确定根本问题是什么,但这为我解决了。
netstat -ano
没有列出使用端口 3000 的任何内容。
自从我找到解决方案以来,我今天面临同样的问题。
问题是因为即使 nodemon
重新启动,也有节点服务在后台运行。
我经历了很多答案,但都带有多个命令。我为我的案例找到了一个简单的命令
sudo pkill node
这将终止节点中所有正在运行的进程,并且您的 nodemon
将按预期开始工作。
这有时会发生在我身上,正在使用 EADDR。通常有一个终端窗口隐藏在后台仍在运行应用程序。您可以在终端窗口中使用 ctrl+C 停止进程。
或者,由于复制/意大利面,您可能正在多次监听端口 =)
.listen()
多次?
打开任务管理器(按 Ctrl+Alt+Del 选择“进程选项卡”搜索“Node.js:服务器端 JavaScript”选择它并单击“结束任务”按钮
我花了 2 小时找出为什么 EADDRINUSE
不允许我启动应用程序(其他 node-express 服务器还可以)...在将 lazyConnect: true,
添加到数据源配置后它开始工作。
不要问我为什么有帮助。我不知道。我把这些信息放在这里只是为了有同样问题的人。
如果您只想关闭一个端口,只需运行此命令。 kill -9 $(lsof -t -i:3000)
pkill
和 kill
之间的区别在于有人加工粘土。在杀死你应用过滤器。你只需停止你想要的端口。
pkill
命令关闭所有节点进程。 pkill -9 node
使用 pkill 避免在开发过程中偶尔发生的内存泄漏。如果有多个节点,它会杀死所有节点。
package.json 中脚本的使用也是一个例子。
"scripts": {
"server:start": "cd server && yarn start",
"server:restart": "cd server && yarn restart",
"frontend:start": "cd frontend && yarn start",
"frontend:restart": "kill -9 $(lsof -t -i:4200) && yarn start:frontend"
},
"scripts": {
"start": "nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec 'ts-node' src/index.ts",
"restart": "pkill -9 node && start",
"kill": "pkill -9 node"
},
我最近在win10上遇到了一个奇怪的port problem
,无法启动服务器进程监听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
...
大多数说“端口已在使用”的类似消息幸运的是,我搜索并找到了原因。经过
netsh interface ipv4 show excludedportrange protocol=tcp
可以看到一些端口被排除在外,通过这些端口没有打开和监听。并且通过
net stop winnat
大部分被排除的端口都被释放了,这些端口就可以使用了。
net stop winnat
- 我只是忘记了那个命令。由于同样的问题,几周前和今天需要它(有时会出现......为什么?!)。将其添加到自动启动中。
winnat
服务是由 windows hyper-v 启动的
这是一个古老的问题,但似乎没有一个响应者真正阅读过它。我遇到了同样的问题,问题是 Windows 有时会保留端口块并阻止您使用它们。该端口不会通过 netstat 或任何其他工具显示。 You can read about it here:
从本质上讲,您可以告诉 Windows 让您的端口单独使用:
netsh int ipv4 add excludedportrange tcp startport=3000 numberofports=1 store=persistent
当命令没有列出任何任务时会发生这种情况
lsof -i:3000
仍然,你得到一个错误
Error: listen EADDRINUSE: address already in use 0.0.0.0:3000
一个原因是在 Nginx conf.d 中检查没有配置正在侦听端口 3000
我在 Windows 上使用 Git Bash 遇到了这个问题。我运行 npm start
或 node app.js
。在不久之后使用 Ctrl+C 终止它并尝试使用 npm start
或 node app.js
再次启动服务器后,我收到此错误消息。
但是,当我使用常规的 Windows 命令提示符执行此操作时,它可以正常工作。
或者你可以用另一种方式来做。打开任务管理器并找到“Node.js:Server-side JavaScript”行。选择那个并结束任务。它现在应该可以工作了。
谢谢。
https://i.stack.imgur.com/1hOsY.png
打开命令提示符并首先运行以下命令:
netstat -ano | findstr :7001
然后运行这个命令:
taskkill /PID 2820 /F
来自 Google 的这里有针对 High Sierra 的解决方案。
macos 的网络设置发生了一些变化,某些应用程序(包括 ping)无法解析 localhost。
编辑 /etc/hosts 似乎是一个修复:
cmd:sudo nano /etc/hosts/
内容 127.0.0.1 localhost
或者简单地说(如果您确定 /etc/hosts 为空)sudo echo '127.0.0.1 localhost' > /etc/hosts
对于 windows 用户,只需在任务管理器中简单地停止 Node.js 的所有进程
希望它会有所帮助
如果你在同一个端口上多次调用 app.listen 函数,你会得到这个错误。
您可以检查您的代码是否有任何循环
尝试在浏览器中打开 localhost。只需在地址栏中输入:localhost:3000
。
如果应用程序打开,则表示您之前的 npm run
仍处于活动状态。现在,如果您正在设计相同的应用程序,或者如果您想运行另一个应用程序,您只需对代码进行更改并查看效果,只需稍微调整代码(在先前运行的应用程序的 index.js 中)和(可能刷新浏览器选项卡)使其崩溃;).....现在从新的应用程序目录再次运行 npm run start
。希望这可以帮助! :)
或者
您可以打开任务管理器(WINDOWS_KEY+X > 任务管理器),您将看到“Node.js:Server-side JavaScript”行。选择那个并结束任务....它现在应该可以工作了!
如果没有,请将应用程序的 .env
文件更改为包含 port:3002
并运行新应用程序。这将允许您在不同的端口上运行两个单独的应用程序。干杯!!
简单的linux
打开你的终端
从进程中释放端口-> kill $(lsof -t -i:$port)
在运行 nodemon
之前,请先启动 mongod
。你永远不会得到这个错误。
它可能是在后台运行的管理进程,而 netstat
没有显示这一点。
使用 tasklist | grep node
查找此管理进程的 PID,然后使用 kill PID
如果您使用的是 webstorm,请确保您的默认端口不是 3000,来自文件 -> 设置 -> 构建、执行、部署 -> 调试器,然后更改
内置服务器端口
并将其设置为“63342”或查看此答案Change WebStorm LiveEdit Port (63342)
在 package.json 脚本中包括:
"start": "nodemon app.js --delay 1500ms"
我相信对我而言,问题在于 nodemon 没有及时关闭旧端口以重新启动。我使用 multer 遇到了这个问题。
lsof
什么都得不到,但用sudo lsof
我得到了一些东西,杀死那个进程解决了这个问题。