如何使用请求使用变换stream?

基本上,我想在发送到客户端之前使用转换stream来改变http响应,但是我的代码在下面会引发一个错误:[Error:write after end]。

http://nodejs.org/api/stream.html#stream_writable_end_chunk_encoding_callback上的文档说:

在调用end()之后调用write()会引发一个错误。

在这种情况下,如何防止write()在end()之后被调用?

var request = require('request'); var Transform = require('stream').Transform; var http = require('http'); var parser = new Transform(); parser._transform = function(data, encoding, done) { console.log(data); this.push(data); done(); }; parser.on('error', function(error) { console.log(error); }); http.createServer(function (req, resp) { var dest = 'http://stackoverflow.com/'; var x = request({url:dest, encoding:null}) x.pipe(parser).pipe(resp) }).listen(8000); 

一个stream应该只能使用一次,但是对于每个传入的请求都使用相同的转换stream。 在第一个请求它会工作,但是当xclosures, parser也是如此:这就是为什么在第二个客户端请求,你会看到write after end错误。

要解决这个问题,只需在每次使用时创build一个新的转换stream:

 function createParser () { var parser = new Transform(); parser._transform = function(data, encoding, done) { console.log(data); this.push(data); done(); }; return parser; } http.createServer(function (req, resp) { var dest = 'http://stackoverflow.com/'; var x = request({url:dest, encoding:null}) x.pipe(createParser()).pipe(resp) }).listen(8000);