这个错误通常发生在以下情况: 1. 客户端请求超时 2. 服务器响应超时 3. 网络连接不稳定 4. 服务器资源耗尽 5. 代理服务器或负载均衡器配置问题
const express = require('express');
const app = express();
// 增加服务器超时设置(默认2分钟)
const server = app.listen(3000, () => {
console.log('Server running on port 3000');
});
server.timeout = 300000; // 5分钟超时
确保没有阻塞的中间件或长时间运行的同步操作:
app.use((req, res, next) => {
// 避免长时间运行的同步操作
next();
});
如果是文件上传导致的问题:
const bodyParser = require('body-parser');
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
如果使用Nginx等反向代理:
# Nginx配置示例
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
// 启用HTTP keep-alive
const http = require('http');
const server = http.createServer(app);
server.keepAliveTimeout = 65000; // 65秒
server.headersTimeout = 70000; // 70秒
// 客户端重试逻辑示例
async function makeRequestWithRetry(url, retries = 3) {
try {
const response = await axios.get(url);
return response.data;
} catch (error) {
if (retries > 0) {
await new Promise(resolve => setTimeout(resolve, 1000));
return makeRequestWithRetry(url, retries - 1);
}
throw error;
}
}
添加详细的错误日志:
app.use((err, req, res, next) => {
console.error('Connection error:', err.stack);
res.status(500).send('Something broke!');
});
如果问题仍然存在,可能需要检查网络基础设施或考虑升级服务器硬件资源。