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


当前回答

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

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

其他回答

今天我在Windows上就遇到了这种情况。我重新启动了我的计算机,并检查了端口3000上没有任何东西,它不是。

我试着用3001,3005也有同样的效果。

最后我搬到了8881,现在能用了。

对我来说唯一改变的是安装windows更新和更新源地图资源管理器。因为这也发生在其他应用程序,它要么与网络风暴或窗口。我猜端口可能被锁定了,但88XX范围内的端口没有。

打开任务管理器(按Ctrl+Alt+Del 选择“流程选项卡” 搜索“Node.js:服务器端JavaScript” 选择它并单击“结束任务”按钮

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

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

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

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

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

在Windows上:

netstat -ano | findstr :3000
tskill typeyourPIDhere 

在git bash中将tskill更改为taskkill