Node.js端口号3000已被占用,但实际上并没有被占用?

385

我已经在一个node.js项目上工作了几周,一切进展顺利。通常,我使用npm start来运行我的应用程序,并在本地主机上的浏览器中查看它,端口为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来检查使用该端口的进程,但没有任何东西在使用该端口。我还尝试重新启动我的笔记本电脑,但仍然遇到相同的错误。


1
你尝试过访问 https://dev59.com/nXVD5IYBdhLWcg3wOo5h 吗? - Isaac
1
网站图标将被缓存。您也可以尝试在命令提示符中使用 netstat,或者使用类似于 PuTTY 的 telnet 等价物连接到 localhost:3000。 - Blorgbeard
7
我注意到你在“服务器已经启动在端口3000上”之后收到了“端口3000已经被占用”的消息 - 你的应用程序中是否有尝试再次在同一端口上开始监听的操作? - Blorgbeard
10
我猜测你的应用程序中有两个 app.listen() 语句,再加上另一个 .listen() 也试图在同一端口启动服务器。第一个运行成功,而第二个会报错。请搜索你的代码中是否存在 .listen - jfriend00
对我来说,问题出在我的 .env 文件上 - 所以请确保其中没有语法错误。 - SMEETT
显示剩余10条评论
46个回答

0
如果您使用的是WebStorm,请确保默认端口不是3000。
步骤如下:文件 -> 设置 -> 构建、执行、部署 -> 调试器,然后更改内置服务器端口为"63342"。
或者参考这个答案:Change WebStorm LiveEdit Port (63342)

0
在 package.json 文件中的 scripts 字段中包含:
"start": "nodemon app.js --delay 1500ms"

我认为问题在于旧端口没有及时关闭以便nodemon进行重启。我在使用multer时遇到了这个问题。


根据需要调整延迟。 - Kalkhas

0

服务器或应用程序的listen()方法可能被添加到两个位置。 在应用程序启动时搜索listen()方法, 这就是为什么会同时返回“在端口XXXX上启动服务器”和“端口XXXX已经在使用中”的消息。


0

非常简单。您可以通过两个简单的步骤来解决它。

  1. 检查您的环境变量是否有一个名称为“PORT”的键/条目。
  2. 如果找到,请删除该条目或将其重命名为其他名称。

事实证明,某些其他程序正在使用该变量。通常,当您启动react-scripts时,它会查找具有该标题PORT的环境变量。


0

今天在Windows上,这种情况开始发生在我身上。我已经重新启动了计算机,并检查了3000端口上是否存在任何内容,但没有。

我尝试使用3001、3005,但结果相同。

最终我改为8881端口,现在可以正常使用了。

唯一改变的是安装了Windows更新和更新了source-map-explorer。由于其他应用程序也出现了这个问题,所以可能是Web Storm或Windows的问题。我猜测端口可能被锁定,但88XX范围内的端口没有。


0

回复晚了,但可能对某些人有帮助:

在我的情况下,没有任何东西使用端口3000(与OP相同,但所有答案都是关于杀死正在使用该端口的进程 - 这并没有帮助)。

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


0

我在这里尝试了所有的方法,但都没有起作用。当我检查端口时,没有任何进程显示出来。最终起作用的是关闭NoMachine。我把这个留在这里,以防它能帮到其他人。


0

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

enter image description here


0
在我的情况下,我刚开始使用VS Code,并按照使用Sequelize的教程进行操作。最后,我有一个bin/www文件,其中包含listen()。我不知道这一点,当我运行node app.js时,它没有工作,然后我添加了express服务器的内容,包括.listen()(这很好用)。但是,当我开始使用nodemon和VSCode时,它指向了bin/www并需要我的app.js。
长话短说,我已经将.listen()添加到了我的app.js中,并直接运行app.js,而我不应该添加那个并运行bin/www。

0

我已经解决了这个问题,因为MongoDB或者是你之前在这个端口上运行了另一个应用程序, 所以要解决它,可以从任务管理器中结束这个进程, 或者只需将端口号从3000更改为其他任意一个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接