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

NestJS中GET请求出现Socket hang up错误的排查求助

排查NestJS中「Error: socket hang up」错误的思路

1. 检查请求参数编码与格式差异

  • 你当前URL中手动编码了proceduresTypes=%5B%22directAward%22%5D,但Nest的HttpService处理params时可能会重复编码,导致参数格式和Postman不一致。建议将该参数移到params中统一处理,让框架自动编码:
    params: { 
        pageSize, 
        page, 
        cdb: 'items',
        proceduresTypes: JSON.stringify(['directAward'])
    }
    
  • 确认page和pageSize的参数格式是否和Postman完全匹配,比如是否存在大小写、额外空格等细微差异。

2. 补充请求头信息

Postman会自动添加User-Agent、Accept等默认请求头,而Nest的HttpService默认头可能不全,导致服务端拒绝连接。尝试复制Postman中的请求头添加到代码里:

this.http.get('https://example.com/search/items', {
    params: {...},
    headers: {
        'User-Agent': 'PostmanRuntime/7.32.3', // 替换为你Postman里的实际值
        'Accept': '*/*',
        'Connection': 'keep-alive'
    }
})

同时检查是否有Authorization等自定义业务头,Postman中配置了但代码里遗漏的情况。

3. 调整超时设置

「socket hang up」常和请求超时有关,Postman默认超时时间较长,而Nest的HttpService默认超时可能不足。可以通过两种方式调整:

  • 在请求的pipe中添加超时操作符:
    import { timeout } from 'rxjs/operators';
    
    return this.http.get(...)
        .pipe(
            timeout(30000), // 设置30秒超时
            map(...)
        );
    
  • 在模块中全局配置HttpService超时:
    // 模块的imports数组中
    HttpModule.register({
        timeout: 30000,
        maxRedirects: 5
    })
    

4. 排查响应处理逻辑

  • 先注释掉map中的业务判断和数据映射,直接返回原始响应,确认是否还会报错:
    .pipe(
        tap(rawRes => console.log('原始响应:', rawRes)),
        // 暂时注释map逻辑
    )
    
  • 检查data.code !== 200的判断是否准确:如果接口的HTTP状态码是200,但业务code的层级不对(比如在顶层而非data对象里),这里的错误抛出会中断流,可能间接触发socket相关错误。
  • 暂时移除plainToClass的映射,直接返回data.data,排查是否是DTO转换过程中阻塞或出错导致的超时。

5. 确认网络环境差异

  • 检查Nest应用所在环境是否能正常访问目标域名,比如是否存在代理、防火墙限制。如果Postman使用了系统代理,需要给Nest的HttpService配置代理:
    HttpModule.register({
        proxy: {
            host: '你的代理地址',
            port: 代理端口
        }
    })
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:52:17