You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js服务器无法稳定接收React中Axios发送的请求,请求偶发无响应

问题排查与解决方案

1. 核心问题:未定义HTTP请求路由导致请求挂起

你的服务器仅添加了日志中间件,但没有任何处理HTTP请求的路由逻辑。当Axios发送请求时,中间件打印路径后调用next(),但后续没有路由函数响应请求,请求会一直处于pending状态,最终超时,表现为“服务器无响应”。

修复方法:添加基础路由测试:

// 放在日志中间件之后
app.get('/test', (req, res) => {
  res.status(200).json({ success: true, message: '请求已响应' });
});

在React中发送GET http://localhost:你的端口/test,验证服务器是否打印路径并返回响应。

2. 大量并发请求引发连接积压

短时间发送大量请求会触发Node.js HTTP服务器的默认连接限制,导致部分请求被积压甚至丢弃,出现“服务器很久才收到请求”或“50%概率响应”的情况。

修复方法:

  • 调整服务器最大连接数(根据服务器性能调整):
    server.maxConnections = 1000;
    
  • 在React端对请求做节流/防抖,避免短时间内重复发送:
    // 示例:使用防抖控制请求频率(需引入lodash或自行实现)
    const debouncedFetch = _.debounce(async () => {
      await axios.get('/api/data');
    }, 500);
    
  • 检查组件是否重复渲染导致多次触发请求逻辑。

3. CORS配置不一致导致浏览器拦截

你的Socket.IO配置了明确的origin: 'http://localhost:3000',但Express的cors()使用默认配置,可能导致部分请求的CORS预检查失败,浏览器拦截响应,看起来像是服务器未响应。

修复方法:统一CORS配置:

app.use(cors({
  origin: 'http://localhost:3000',
  credentials: true // 若需携带cookie等凭证则开启
}));

同时检查浏览器控制台是否有CORS相关错误(开发者工具→控制台→筛选Errors)。

4. 请求URL/端口不匹配

确认React中Axios的请求端口与服务器监听的process.env.PORT完全一致,且请求路径与服务器路由(后续添加的)拼写无误。

5. 事件循环阻塞导致请求延迟

检查是否存在阻塞Node.js事件循环的代码(如大量同步计算、未处理的Promise阻塞),这会导致服务器无法及时处理请求。

修复方法:

  • 将耗时同步操作放到事件循环下一轮:
    process.nextTick(() => {
      // 耗时操作
    });
    
  • 捕获未处理的Promise拒绝,避免进程异常:
    process.on('unhandledRejection', (err) => {
      console.error('未处理的Promise错误:', err);
    });
    

内容的提问来源于stack exchange,提问作者Elad87

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 14:25:23