nodejs在从源到目标的管道中修改数据

时间:2015-07-25 10:37:14

标签: node.js

我有一个简单的http服务器,它将所有数据从req对象(源)传递到res(目标)对象。但在将其写入destionation之前,如何从源更改输出数据呢? 通过更改数据我的意思很简单,比如在数据上调用toUpperCase()

http.createServer(function(req, res){
    if(req.method.toLowerCase() != 'post')
        res.end() ;
    req.pipe(res) ;
}).listen(9090) ; 

1 个答案:

答案 0 :(得分:0)

您可以像这样创建自己的Transform stream,它位于两个流之间:

var inherits = require('util').inherits;
var TransformStream = require('stream').Transform;

function UpperStream() {
  TransformStream.call(this);
}
inherits(UpperStream, TransformStream);
UpperStream.prototype._transform = function(chunk, encoding, cb) {
  for (var i = 0; i < chunk.length; ++i) {
    var ch = chunk[i];
    // Check for lowercase character
    if (ch >= 97 && ch <= 122) {
      // Make it uppercase
      chunk[i] &= ~32;
    }
  }
  cb(null, chunk);
};

然后你可以做类似的事情:

http.createServer(function(req, res){
    if(req.method.toLowerCase() != 'post')
        return res.end() ;
    req.pipe(new UpperStream()).pipe(res) ;
}).listen(9090) ;