📅  最后修改于: 2023-12-03 15:28:35.652000             🧑  作者: Mango
当在 Node.js 应用程序中尝试监听端口时,可能会遇到错误 Error: listen EADDRINUSE: address already in use
。这种情况通常发生在需要监听的端口已经被其他进程或服务占用的时候。
出现此错误时,我们需要找到正在使用该端口的进程,并将其关闭或更改其监听端口。可以通过运行以下命令在Unix终端中找到正在使用的端口:
sudo lsof -i :<port_number>
将 <port_number>
替换为应用程序尝试使用的端口号。该命令会列出正在使用该端口的进程的信息。可以通过 PID
列中的进程 ID 来确定哪个进程在使用该端口。
然后,可以使用 kill
命令强制关闭该进程:
kill -9 <PID>
或者,如果该端口是被其他应用程序占用,可以在代码中将其更改为其他可用的端口:
const app = require('express')();
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(`App is listening on port ${port}`);
});
在上面的代码中,我们将端口号 3000
定义为默认值,如果该默认端口已被占用,则会尝试使用环境变量 PORT
中的定义的端口号。
避免出现此错误的一种方法是使用过滤器仅允许运行在指定端口上的应用程序。这种方法可以保证没有其他进程会占用该端口。还可以使用类似 Docker 的容器来为每个应用程序分配独立的端口。另外,也可以使用 kill -9 <PID>
命令手动杀死占用该端口的进程。