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


当前回答

 killall -9 node

当你在远程开发时,上面的命令可以退出vs code ssh连接,并杀死所有可能导致问题的节点进程,特别是如果你在生产中有一些应用程序使用node,有一个更好的方法,使用netstat获取所有节点进程及其所使用的端口,然后通过PID杀死你想要的唯一一个

 netstat -lntp | grep node

您将获得所有节点进程

 tcp6  0      0 :::5744    :::*    LISTEN     3864/node

然后当你得到PID(3864)时,通过PID终止进程

   kill -9 PID

or

   kill -HUP PID 

其他回答

服务器或应用程序的listen()方法可以添加在两个位置。 中搜索listen()方法用于应用程序启动 这就是为什么它返回作为服务器启动端口XXXX和端口XXXX已经在使用消息并排出现

回复晚了,但可能会有帮助:

在我的例子中,没有任何东西使用端口3000(与OP相同,但所有的答案都是关于杀死使用该端口的进程——这没有帮助)。

然而,在任务管理器中,我们运行的两个node.exe副本,即使我杀死它们,也会重新启动。如果你在任务管理器中右键单击node.exe,你会看到这些进程在哪里运行。对我来说,原来Adobe Creative Cloud打包了自己的node.exe,这给我带来了问题。重命名文件(因为我没有使用云服务)对我来说很有用。

当命令中没有列出任何任务时,就会发生这种情况

lsof -i:3000

还是会得到一个错误

Error: listen EADDRINUSE: address already in use 0.0.0.0:3000

一个原因是在Nginx conf.d检查中,没有任何配置在端口3000上监听

如果你在同一个端口上多次调用app.listen函数,你会得到这个错误。

你可以检查任何循环的代码

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

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