代码之家  ›  专栏  ›  技术社区  ›  Moose

nodejs https请求OnData事件触发多次

  •  0
  • Moose  · 技术社区  · 7 年前

    我想知道为什么 console.log() 声明发生了两次。如果我登录到控制台外部 res.on('data) { ... } ,我只看到它记录一次,但是,如果我在 onData 函数,它触发两次。

    问题: 为什么是 研究(数据)…} 开火两次?

    这是我使用的代码,直接来自本页的节点文档:

    const https = require('https');
    
    const options = {
      hostname: 'www.myEndpoint.com',
      port: 443,
      path: '/path/to/endpoint?parameter1=true&parameter2=false',
      method: 'GET'
    };
    
    const req = https.request(options, (res) => {
      console.log('statusCode:', res.statusCode);
      console.log('headers:', res.headers);
    
      res.on('data', (d) => {
        console.log('This console log happens twice for some reason');
        process.stdout.write(d);
      });
    });
    
    req.on('error', (e) => {
      console.error(e);
    });
    req.end();
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   MisterSnow    7 年前

    “res”对象是一个双工流(在这种情况下很重要的是,它在读取“data”事件),它是从您的HTTPS请求中导出的。基本上,流是打开的,直到一个端点关闭或向读取流端点写入空值为止。

    发生的是,HTTPS请求套接字多次写入流。如果您希望捕获从HTTPS请求发送的数据的结尾,那么应该为“end”事件创建一个函数。

    res.on('end',()=>console.log('w/e here'));