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

如何解析Node.js request模块获取的服务器响应

问题

我用Node.js的request模块请求指定URL的HTML内容,已经通过以下代码成功拿到HTML:

request(build[i], function(error, response, html) {
  // 代码逻辑
})

但没法解析服务器返回的response对象并访问内部数据,服务器响应的response对象结构如下:

<ref *2> IncomingMessage {
  _readableState: ReadableState {
    objectMode: false,
    highWaterMark: 16384,
    buffer: BufferList { head: null, tail: null, length: 0 },
    length: 0,
    pipes: [],
    flowing: true,
    ended: true,
    endEmitted: true,
    reading: false,
    constructed: true,
    sync: false,
    needReadable: false,
    emittedReadable: false,
    readableListening: false,
    resumeScheduled: false,
    errorEmitted: false,
    emitClose: true,
    autoDestroy: true,
    destroyed: false,
    errored: null,
    closed: false,
    closeEmitted: false,
    defaultEncoding: 'utf8',
    awaitDrainWriters: null,
    multiAwaitDrain: false,
    readingMore: false,
    dataEmitted: true,
    decoder: null,
    encoding: null,
    [Symbol(kPaused)]: false
  },
  _events: [Object: null prototype] {
    end: [ [Function: responseOnEnd], [Function (anonymous)] ],
    close: [ [Function (anonymous)], [Function (anonymous)] ],
    data: [Function (anonymous)],
    error: [Function (anonymous)]
  },
  _eventsCount: 4,
  _maxListeners: undefined,
  socket: <ref *1> TLSSocket {
    _tlsOptions: {
      allowHalfOpen: undefined,
      pipe: false,
      secureContext: [SecureContext],
      isServer: false,
      requestCert: true,
      rejectUnauthorized: true,
      session: undefined,
      ALPNProtocols: undefined,
      requestOCSP: undefined,
      enableTrace: undefined,
      pskCallback: undefined,
      highWaterMark: undefined,
      onread: undefined,
      signal: undefined
    },
    _secureEstablished: true,
    _securePending: false,
    _newSessionPending: false,
    _controlReleased: true,
    secureConnecting: false,
    _SNICallback: null,
    servername: 'mysterioustrip.com',
    alpnProtocol: false,
    authorized: true,
    authorizationError: null,
    encrypted: true,
    _events: [Object: null prototype] {
      close: [Array],
      end: [Function: onReadableStreamEnd],
      newListener: [Function: keylogNewListener],
      secure: [Function: onConnectSecure],
      session: [Function (anonymous)],
      free: [Function: onFree],
      timeout: [Function: onTimeout],
      agentRemove: [Function: onRemove],
      error: [Function: socketErrorListener],
      finish: [Function]
    },
    _eventsCount: 10,
    connecting: false,
    _hadError: false,
    _parent: null,
    _host: 'mysterioustrip.com',
    _closeAfterHandlingError: false,
    _readableState: ReadableState {
      objectMode: false,
      highWaterMark: 16384,
      buffer: BufferList { head: null, tail: null, length: 0 },
      length: 0,
      pipes: [],
      flowing: true,
      ended: false,
      endEmitted: false,
      reading: false,
      constructed: true,
      // 省略剩余内容
    }
  }
}

我尝试用点符号访问response对象内的键值但没成功,请问该怎么访问这些数据?

解决方案

你遇到的response是Node.js原生的IncomingMessage对象,部分属性以下划线开头(属于内部实现属性),但仍可通过点符号或方括号正常访问,具体方式如下:

  • 直接访问层级较浅的属性:不管属性是否以下划线开头,直接用点符号链式访问即可

    // 访问响应的事件数量
    console.log(response._eventsCount);
    // 访问socket中的服务器名称
    console.log(response.socket.servername);
    // 访问socket的主机地址
    console.log(response.socket._host);
    
  • 访问嵌套的内部属性:对于多层嵌套的属性,继续用点符号逐层访问

    // 访问_readableState中的highWaterMark
    console.log(response._readableState.highWaterMark);
    // 访问socket下_tlsOptions的rejectUnauthorized配置
    console.log(response.socket._tlsOptions.rejectUnauthorized);
    
  • 访问Symbol类型的属性:对于结构中类似[Symbol(kPaused)]的Symbol属性,需要先获取对应的Symbol值,再用方括号访问

    // 找到对应的Symbol
    const kPausedSymbol = Object.getOwnPropertySymbols(response._readableState)
      .find(sym => sym.description === 'kPaused');
    // 访问Symbol属性值
    console.log(response._readableState[kPausedSymbol]);
    

额外提示

  • request模块已被标记为废弃状态,后续建议迁移到axios、node-fetch等仍在维护的HTTP库,这类库会将响应数据封装得更直观易用。
  • 下划线开头的属性属于Node.js内部实现细节,可能会在版本更新中发生变更,生产环境使用需谨慎。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:05:26