我通过我的Node.js服务器代理一个S3调用,并希望在代理它们之前调整几个返回的 XML值.除了那些调整,我想保留每个响应的其余部分,例如响应标头. 我当然可以首先收集整个响应,解析XML,转
我当然可以首先收集整个响应,解析XML,转换它,然后将其返回,但对于大型响应来说,这些响应既缓慢又占用大量内存.有没有办法我可以基本上实现stream.pipe(),但可能有一个转换函数?
我看过sax-js,它可以管道,但没有任何转换能力.我是否不得不求助于听取低级解析事件并自己生成和输出生成的XML?
我还看了libxmljs,它有一个“推送解析器”和一个更高级别的DOM API,但看起来我再次必须自己听低级解析事件,而且我不确定我是否可以流结果生成的XML.
有没有比这两种方法更简单的方法?谢谢!
附: XML调整很简单:只从一些文本元素中删除子字符串.
在这种情况下,您可以一起收集所有块,如下所示:var data='', tstream = new stream.Transform(); tstream._transform = function (chunk, encoding, done) { data += chunk.toString(); done(); };
并在_flush函数的最后调用中执行您需要的操作:
tstream._flush = function(done){ data += 'hola muheres'; this.push(data); done(); };
所以它们一起看起来像:
req.pipe(anotherstream).pipe(tstream).pipe(response);