我有一个简单的服务器运行在node.js使用连接:

var server = require('connect').createServer();
//actions...
server.listen(3000);

在我的代码中,我有实际的处理程序,但这是基本的思想。我一直遇到的问题是

EADDRINUSE, Address already in use

我收到这个错误时再次运行我的应用程序后,它以前崩溃或错误。因为我没有打开一个新的终端实例,所以我用ctr + z关闭了这个进程。

我非常确定我所要做的就是关闭服务器或连接。我尝试在进程中调用server.close()。(“退出”,…);运气不好。


当前回答

你也可以通过命令行方式:

ps aux | grep node

来获取进程id。

然后:

kill -9 PID

在kill时执行-9会发送SIGKILL(而不是SIGTERM)。 SIGTERM有时会被节点忽略。

其他回答

我得到这个错误一次,并采取了许多方法在这里。

我的问题是我有两个app.listen(3000);在同一个app.js脚本中调用。第一个app.listen()在第二个抛出错误的地方成功了。

我遇到的另一个帮助我调试的有用命令是sudo fuser -k 3000/tcp,它会杀死你可能启动的任何恶意进程(一些进程可能会重新启动,例如,如果使用forever.js运行,但它对我很有用)。

bash$ sudo netstat -ltnp | grep -w ':3000'
 - tcp6    0      0 :::4000      :::*        LISTEN      31157/node      

bash$ kill 31157

Win10, git bash v2.15, node v8.9.1, npm v5.5.1

我有一个包裹。Json脚本启动节点:"start": "node index.js"

无论何时我使用它,不管我是否用ctrl+c杀死它,我都遇到了这个问题。

如果我只是从git bash运行node index.js而不是npm run start并用ctrl+c杀死,我永远不会得到这个错误。

我不知道为什么,但我想这可能会帮助到一些人。

您可以使用热节点来防止服务器崩溃/运行时错误。当节点程序[source] /进程[running node program]发生变化时,Hot-node会自动重启nodejs应用程序。

使用global选项使用npm安装hot-node:

安装-g hotnode

这意味着你有两个节点服务器运行在同一个端口上,如果一个运行在端口上,比如3000,将另一个端口更改为另一个端口,比如3001,一切都将正常工作