在 Node.js 中,当尝试监听一个已经被占用的端口时,会抛出 EADDRINUSE
错误。下面给出一个处理该异常的代码示例:
const http = require('http');
const port = 3000;
const server = http.createServer();
server.on('error', (error) => {
if (error.code === 'EADDRINUSE') {
console.log(`Port ${port} is already in use.`);
// 可以在此处编写你的处理逻辑
} else {
console.error('An unexpected error occurred:', error);
}
});
server.listen(port, () => {
console.log(`Server is listening on port ${port}`);
});
在上述代码中,我们创建了一个 HTTP 服务器,并通过 server.listen(port)
方法来监听指定的端口。如果端口已经被占用,则会触发 error
事件,并将错误对象作为参数传递给回调函数。在回调函数中,我们可以通过判断错误对象的 code
属性是否为 'EADDRINUSE'
来确定是否是端口被占用导致的异常。如果是,则可以根据需要编写相应的处理逻辑。
例如,我们可以尝试使用其他可用的端口:
server.on('error', (error) => {
if (error.code === 'EADDRINUSE') {
console.log(`Port ${port} is already in use. Trying a different port...`);
// 尝试使用其他可用的端口
server.listen(0, () => {
const actualPort = server.address().port;
console.log(`Server is now listening on port ${actualPort}`);
});
} else {
console.error('An unexpected error occurred:', error);
}
});
在上述代码中,我们通过传递 0
作为端口号给 server.listen()
方法,使服务器在可用的端口上监听。通过 server.address().port
可以获取实际被监听的端口号。
总结来说,捕获异常并处理 EADDRINUSE
错误的步骤如下:
server.on('error', callback)
来监听错误事件。code
属性是否为 'EADDRINUSE'
。