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


当前回答

如果只关闭一个端口,执行此命令即可。 Kill -9 $(lsof -t -i:3000)

pkill和kill的区别是某人在处理黏土。在kill中,你应用一个过滤器。你只要停你想停的端口。

pkill命令关闭所有节点进程。 Pkill -9节点

使用pkill可以避免在开发过程中偶尔发生的内存泄漏。如果有一个以上的节点,它会杀死所有的节点。

在包中使用脚本。Json也是一个例子。

"scripts": {
    "server:start": "cd server && yarn start",
    "server:restart": "cd server && yarn restart",
    "frontend:start": "cd frontend && yarn start",
    "frontend:restart": "kill -9 $(lsof -t -i:4200) && yarn start:frontend"
},
"scripts": {
    "start": "nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec 'ts-node' src/index.ts",
    "restart": "pkill -9 node && start",
    "kill": "pkill -9 node"
},

其他回答

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

对于windows, 任务管理器肯定会显示正在运行的节点进程。 尝试终止进程,它将解决问题。

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

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

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

sudo pkill node

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

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

在我的情况下,我刚刚开始使用VS Code,并遵循了使用Sequelize的教程。 最后,我有一个bin/www文件,其中有listen()。 我不知道这一点,我通过运行节点app.js来运行我的应用程序,当它不起作用时,我用.listen()(这工作得很好)添加了快速服务器的东西。

但是当开始使用nodemon和VSCode时,它被指向bin/www,这需要我的app.js。

长话短说,我已经添加了.listen()到我的app.js,并在我不应该添加并运行bin/www时直接运行app.js。