我已经在一个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来检查哪个进程正在使用该端口,但是没有使用该端口。我也尝试重新启动我的笔记本电脑,但我仍然得到同样的错误。


当前回答

通过输入命令检查在同一端口上运行的任何进程:

sudo ps -ef

您可以找到在各个节点端口上运行的进程,然后通过

kill -9 <node id>

如果问题仍然存在,那么就杀死所有节点

killall node

其他回答

我也见过同样的情况,尝试了上面所有的建议都没有成功。下面是我解决这个问题的几个步骤: -关闭wifi NPM启动(这应该可以工作) -打开wifi

我不太确定根本问题是什么,但这为我解决了问题。

有时会发生,就像@sova提议的那样,有时会发生在我身上,使用EADDR。通常会有一个终端窗口隐藏在后台,它仍在运行应用程序。我也是这样。

它发生了,当你打开终端很长一段时间,是的,你有权利,你必须停止这个过程。但有时它并没有在背景中停止。因此,最好的解决方案是关闭终端,然后重新启动。它会解决你的问题。因为这对我来说很管用。

同时,

sudo lsof -i:<PORT_NO>

当前关闭实例,但无法在后台停止进程。所以有一次,

sudo kill <PID>

工作,但再次当我们更新我们的代码和保存,这个问题再次发生与Nodemon。

所以退出终端就能解决问题。或

  killall -9 node

这是一个老问题,但似乎没有一个回复者真正读过它。我也遇到过同样的问题,问题是Windows有时会保留端口块并阻止你使用它们。该端口不会通过netstat或任何其他工具显示。你可以在这里阅读:

从本质上讲,你可以告诉Windows离开你的端口:

netsh int ipv4 add excludedportrange tcp startport=3000 numberofports=1 store=persistent

我最近在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
...

,大多数人说类似的信息“端口已经在使用” 幸运的是,我找到了原因。通过

netsh interface ipv4 show excludedportrange protocol=tcp

可以看出有些端口是排除使用的,通过这些端口没有打开和监听。 并通过

net stop winnat

大多数排除端口被释放,这些端口可以使用。

杀死所有运行的端口(mac):

killall node