【问题标题】:How to get response headers when using needle.js in streaming mode?在流模式下使用 needle.js 时如何获取响应标头?
【发布时间】:2015-10-17 10:48:23
【问题描述】:

我想在流模式下使用 node.js 的 needle 模块,类似于 needle 文档中的这个示例:

var stream = needle.get('http://www.as35662.net/100.log');

stream.on('readable', function() {
  var chunk;
  while (chunk = this.read()) {
    console.log('got data: ', chunk);
  }
});

这允许我从流中读取响应正文。

如何访问响应标头?

【问题讨论】:

    标签: node.js needle.js


    【解决方案1】:

    如果您愿意,可以在流开始之前阅读标题。

    var needle = require('needle');
    var url = 'http://www.stackoverflow.com';
    
        needle.head(url, {method: 'HEAD'}, function (err, response) {
            if (!err && response.statusCode == 200) {
                console.log((JSON.stringify(response.headers)));
            }
    
        });
    

    或在请求中

    var request = require('request');
    var url = 'http://www.stackoverflow.com';
    
    request(url, {method: 'HEAD'}, function (err, response) {
        if (!err && response.statusCode == 200) {
            console.log((JSON.stringify(response.headers)));
        }    
    });
    

    否则你可以在直播后阅读。

    var needle = require('needle');
    var url = 'http://www.stackoverflow.com';
    
    var stream = needle.get(url, function (err, response) {
        if (!err && response.statusCode == 200)
        console.log((JSON.stringify(response.headers)));
    });
    

    但这对请求也有效。

    var request = require('request');
    var url = 'http://www.stackoverflow.com';
    
    var stream = request.get(url, function (err, response) {
        if (!err && response.statusCode == 200)
        console.log((JSON.stringify(response.headers)));
    });
    

    【讨论】:

    • 感谢您的回答,详细而清晰。但是,前两个 sn-ps 发出一个额外的 HEAD 请求,这与获取给定请求的标头不同。后两个有效地恢复到回调模型,这也不是我真正想要的。
    【解决方案2】:

    通过读取源代码,needle 发出两个事件,headerheaders

    只对标题感兴趣:

    var stream = needle.get(someURL);
    
    stream.on('headers', function(headers) {
        // do something with the headers
    });
    

    或状态码和标题:

    stream.on('header', function(statusCode, headers) {
        if (statusCode != 200) {
            // scream and panic
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-19
      • 2016-09-21
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多