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