常见错误类型及处理方式
ECONNREFUSED
错误
- 说明:尝试连接到一个拒绝连接的服务器时会发生此错误,通常是因为服务器未在指定端口监听。
- 处理方式:在客户端代码中使用
net.connect
方法连接服务器时,监听error
事件。例如:
const net = require('net');
const client = new net.Socket();
client.connect({ port: 8080, host: '127.0.0.1' }, () => {
console.log('Connected to server!');
});
client.on('error', (err) => {
if (err.code === 'ECONNREFUSED') {
console.error('Connection refused. Is the server running?');
} else {
console.error('Other error:', err.message);
}
});
EADDRINUSE
错误
- 说明:当尝试在一个已经被其他进程占用的端口上启动服务器时会出现此错误。
- 处理方式:在服务器端代码中使用
net.createServer
创建服务器并监听端口时,监听error
事件。例如:
const net = require('net');
const server = net.createServer((socket) => {
socket.write('Welcome!\n');
socket.end('Goodbye!\n');
});
server.on('error', (err) => {
if (err.code === 'EADDRINUSE') {
console.error('Address already in use. Try another port.');
} else {
console.error('Other error:', err.message);
}
});
server.listen(8080, '127.0.0.1', () => {
console.log('Server listening on port 8080!');
});
ECONNRESET
错误
- 说明:当远端套接字意外关闭连接时会发生此错误,可能是由于服务器崩溃、网络问题等原因。
- 处理方式:在客户端和服务器端代码中,对
net.Socket
实例监听error
事件。例如:
// 服务器端
const net = require('net');
const server = net.createServer((socket) => {
socket.on('data', (data) => {
console.log('Received: ', data.toString());
});
socket.on('error', (err) => {
if (err.code === 'ECONNRESET') {
console.error('Connection reset by peer.');
} else {
console.error('Other error:', err.message);
}
});
});
server.listen(8080, '127.0.0.1', () => {
console.log('Server listening on port 8080!');
});
// 客户端
const client = new net.Socket();
client.connect({ port: 8080, host: '127.0.0.1' }, () => {
client.write('Hello, server!');
});
client.on('error', (err) => {
if (err.code === 'ECONNRESET') {
console.error('Connection reset by server.');
} else {
console.error('Other error:', err.message);
}
});
EPIPE
错误
- 说明:当尝试向一个已关闭的管道(在TCP Socket中类似向已关闭连接的套接字写入数据)写入数据时会发生此错误。
- 处理方式:在写入数据前,先检查套接字是否处于可写状态,或者在
write
方法调用后监听error
事件。例如:
const net = require('net');
const client = new net.Socket();
client.connect({ port: 8080, host: '127.0.0.1' }, () => {
if (client.writable) {
client.write('Hello, server!');
}
client.write('This might cause EPIPE if the connection is closed.', (err) => {
if (err && err.code === 'EPIPE') {
console.error('EPIPE error: trying to write to a closed socket.');
}
});
});