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


当前回答

如果您正在使用webstorm,请确保您的默认端口不是3000 从 文件->设置->构建,执行,部署->调试器 还有变化

内置服务器端口

设置为63342 或者看看这个答案 更改WebStorm LiveEdit端口(63342)

其他回答

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

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

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

谢谢。

您可以搜索如何终止该进程。

对于Linux/Mac OS搜索(sudo)在终端中运行:

$ lsof -i tcp:3000
$ kill -9 PID

在Windows上:

netstat -ano | findstr :3000
tskill typeyourPIDhere 

在git bash中将tskill更改为taskkill

 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 

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

sudo ps -ef

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

kill -9 <node id>

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

killall node

在ubuntu中,首先通过端口号:sudo lsof -i:3000获取进程,然后使用kill命令杀死进程,例如,如果进程PID为4493,则使用命令:kill 4493,对于mac或windows,请查找相关命令