我无法通过在node.js中将这些文件传输到流来将http-headers保存到文件中

时间:2016-12-29 18:06:12

标签: node.js http-headers

var fsHeaders = fs.createWriteStream('headers.html', 'utf-8');
var getHeaders = request('http://google.com', {method: 'HEAD'}, function (error, response, body)
{
    if (error || response.statusCode !== 200)
    {
        return res.redirect('/');
    }

    if (!error && response.statusCode == 200)
    {
        var tester = response.body;
        console.log(tester + 'response.body is EMPTY... so the headers are stored not in the "body"... \n');
        var targetHeaders = response.headers;
        body = body + JSON.stringify(targetHeaders);
        console.log(body + 'OK! \n');
    }
}).pipe(fsHeaders);

但我的headers.html是空的...如何正确保存response.headers文件?我可以稍后修改标题并将其发送给用户没有问题,或者它是否以某种方式受到限制?我想从服务器获取数据,通过节点修改数据,然后将其发送给用户。

2 个答案:

答案 0 :(得分:1)

首先,确认您使用的是http.request

您的问题也可能是因为默认情况下请求返回buffer,您的流是UTF-8格式。

“抓住”标题的更好方法可能是http请求发出的事件:

var postData = querystring.stringify({
  'msg': 'Hello World!'
});

var options = {
  hostname: 'www.google.com',
  port: 80,
  path: '/upload',
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Content-Length': Buffer.byteLength(postData)
  }
};

var req = http.request(options, (res) => {
  console.log(`STATUS: ${res.statusCode}`);
  console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
  res.setEncoding('utf8');
  res.on('data', (chunk) => {
    console.log(`BODY: ${chunk}`);
  });
  res.on('end', () => {
    console.log('No more data in response.');
  });
});

req.on('error', (e) => {
  console.log(`problem with request: ${e.message}`);
});

// write data to request body
req.write(postData);
req.end();

答案 1 :(得分:1)

如果您使用的是请求或http模块,则无关紧要。当您仅使用{method:' HEAD'}请求标头时,方法主体为空,但标头位于响应流中。我想你的问题是需要标题并将它们显示为[objest Object]。你需要在这个问题上将对象更改为字符串 - 只需使用console.log显示它或将其传递给文件。

                        var targetHeaders = objectToString(resp.headers, targetHeaders);

                        function objectToString(object, outputString)
                        {
                            var outputString = '';
                            for (var i in object)
                            {
                                if (object.hasOwnProperty(i))
                                {
                                    outputString += i + ': ' + object[i] + ' \n';
                                }
                            }
                            return outputString;
                        }

now console.log(targetheaders); // OK! no [object Object] anymore :)

您可以毫无问题地传递这些标题。