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


当前回答

来自谷歌的High Sierra解决方案。

macos的网络设置发生了变化,一些应用程序(包括ping)无法解析localhost。

编辑/etc/hosts似乎是一个解决方案:

命令:sudo nano /etc/hosts/ 内容127.0.0.1 localhost

或者简单地说(如果你确定/etc/hosts是空的) 必须回显“127.0.0.1 localhost”> /etc/hosts

其他回答

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

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

终止拥有端口3000的进程

首先,让我们看看如何终止打开端口的进程。

使用lsof命令,我们可以检索具有给定端口的PID:

$ lsof -i :3000 -t
12345

然后我们可以通过这样做来终止这个进程:

$ kill 12345

让我们把它变成一行代码:

lsof -i 3000 -t | xargs kill

如果你使用环境变量来设置服务器端口,我们可以指定它,而不是硬编码我们的值:

lsof -i ${PORT} -t | xargs kill

最后,如果没有设置环境变量,我们可以默认端口3000:

lsof -i ${PORT:-3000} -t | xargs kill

没有恶魔来执行钩子

Nodemon允许你通过Nodemon设置事件钩子。Json配置文件:

{
  "events": {
    "crash": "sh -c 'lsof -i :${PORT:-3000} -t | xargs kill'"
  }
}

这将导致nodemon在应用程序崩溃时执行sh -c 'lsof -i:${PORT:-3000} -t | xargs kill命令,从而杀死它所生成的保持端口打开的子进程。

或者你可以试试这个

fuser -k PORT-NO/tcp

Eg:

fuser -k 3000/tcp

你也可以试试这个

fuser -n tcp -k PORT-NO

Eg:

fuser -n tcp -k 3000

在MAC

kill -9 $(lsof -ti:PORT_NO)

Eg:

kill -9 $(lsof -ti:9229)

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

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

自从我找到解决方案后,我今天就面临着同样的问题。

这个问题是因为有节点服务正在后台运行,即使没有恶魔重启。

我想过很多答案,但都有多种命令。 这是我为我的案子找到的简单命令

sudo pkill node

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

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