📅  最后修改于: 2023-12-03 15:12:33.819000             🧑  作者: Mango
在 Node.js 运行过程中,你有时会遇到这个错误,即在 Server.setupListenHandle 窗口中侦听 EADDRINUSE:地址已在使用 :::1337。这通常是因为你的 Node.js 应用程序正在尝试监听一个已经被使用的端口。
EADDRINUSE 错误和其他 Linux 套接字错误都采用了相同的错误代码 - EADDRINUSE。这个错误意味着你尝试使用一个已经在使用中的网络地址或端口号。当你使用 Node.js 来构建网络应用程序时,这种错误更容易发生。这通常是因为在运行 Node.js 应用程序之前,首先在相同的端口上运行了另一个程序或应用程序,或者你的应用程序在退出时并没有解除端口绑定。
为了解决 EADDRINUSE 错误,你需要找出哪个程序绑定了当前正在使用的端口。你可以使用以下命令找到正在使用该端口的进程 ID:
lsof -i :1337
其中,1337 是当前正在使用的端口号。上述命令会返回所有绑定了该端口的进程的 PID。你需要杀死这些进程,才能使用该端口。你可以使用以下命令杀死一个进程:
kill -9 PID
其中,PID 是进程的 ID。
如果你的应用程序在退出时未释放端口,则可以在应用程序代码中添加以下代码来解除端口的绑定:
const net = require('net')
const server = net.createServer()
server.once('error', function(err) {
if (err.code === 'EADDRINUSE') {
// 端口已被绑定
console.log('端口已被绑定')
}
})
server.once('listening', function() {
// 端口未被绑定
console.log('端口未被绑定')
server.close()
})
server.listen(1337, '127.0.0.1')
上述代码会创建一个 net.Server 对象,并将其绑定到 127.0.0.1:1337。如果端口已被绑定,则会捕获 EADDRINUSE 错误并执行相应的操作。如果端口未被绑定,则会在端口上启动服务器并立即关闭它。
当你在 Node.js 应用程序中遇到 EADDRINUSE 错误时,这意味着你尝试在一个已经被使用的端口上启动服务器。通过找到当前正在使用该端口的进程并杀死它,或通过在代码中添加解除端口绑定的逻辑,你可以解决这个错误。