我不能通过将这些文件传送到node.jsstream中来保存http头文件

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文件? 我以后可以修改标题并将它们发送给用户而没有问题,或者以某种方式受到限制? 我想从服务器获取数据,通过节点进行修改,并将其发送给用户。

不要紧,如果您使用请求或http模块。 当只用{method:'HEAD'}请求头部时,方法体是空的,但头部驻留在响应stream中。 我想你的问题是需要标题,并显示为[objest对象]。 您需要将对象更改为string – 只需将其显示为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 :) 

你可以通过这些头没有任何问题。

首先,validation您使用的是http.request

你的问题也可能是因为默认的请求返回buffer ,你的stream是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();