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

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

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

EADDRINUSE, Address already in use

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

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


当前回答

我正在使用调试器,只是没有停止使用Ctrl+C运行的进程。当我想开始调试时,我得到了这个错误。

其他回答

简单地退出服务器,并将服务器端口3000更改为31000,其工作正常。

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

ps aux | grep node

来获取进程id。

然后:

kill -9 PID

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

ps aux | grep node
kill -9 [PID] (provided by above command)

描述:


Ps将给出进程状态,aux提供a:所有用户进程,u:用户自己的进程,x:所有其他未连接到终端的进程的列表。 管道符号:|将传递ps aux的结果以进行进一步操作。 Grep将从ps aux提供的列表中搜索所提供的字符串(在本例中为节点)。

你可能会遇到这样的情况,即使杀死线程或进程也不会真正终止应用程序(我在Linux和Windows上每隔一段时间就会遇到这种情况)。有时,您可能已经有一个正在运行的实例,但没有关闭。

由于这些情况,我更喜欢在package.json中添加:

"scripts": {
    "stop-win": "Taskkill /IM node.exe /F",
    "stop-linux": "killall node"
},

然后我可以调用它们使用:

npm run stop-win
npm run stop-Linux

如果您愿意,还可以让这些BIN命令带有参数标志。您还可以将它们添加为在try-catch子句中执行的命令。

节点正在内存中的某个地方运行,并且锁定了该端口。在Windows上,这个问题会发生,像大多数Windows问题一样,通过按CTRL+ALT+DEL和/或重新启动来解决。