我已经在一个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 pkill node

这将终止该节点上所有正在运行的进程,您的nodemon将开始正常工作。

其他回答

我也遇到了同样的问题。最好的解决方法是(对于windows):

进入任务管理器。 滚动并找到名为。 Node.js:服务器端JavaScript 结束这个特定的任务。

好了! 现在执行npm start,它将像以前一样工作!

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

lsof -i:3000

还是会得到一个错误

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

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

这种情况有时会发生在我身上,使用EADDR。通常有一个终端窗口隐藏在后台,仍在运行应用程序。你可以在终端窗口中用ctrl+C停止进程。

或者,由于copy/pasta =),你可能会多次监听端口。

我在Windows上使用Git Bash时遇到了这个问题。我运行npm start,或者node app.js。在用Ctrl+C终止它之后,并尝试使用npm start或node app.js再次启动服务器,然后我得到这个错误消息。

然而,当我使用常规的Windows命令提示符执行此操作时,它工作得很好。

或者你可以用另一种方法。打开任务管理器,找到“Node.js:服务器端JavaScript”行。选择并结束任务。现在应该可以了。

谢谢。

它可能是在后台运行的管理进程,netstat没有显示这一点。 使用任务列表| grep节点找到这个管理进程的PID,然后杀死PID