如何编写Node.js模块以处理传入的管道流

布兰登

我正在尝试编写一个节点模块,该模块接受传入的管道二进制(或base-64编码)流,但是坦率地说,我什至不知道从哪里开始。我在Node docs中看不到任何有关处理传入流的示例我只看到食用它们的例子吗?

举例来说,我希望能够做到这一点:

var asset = new ProjectAsset('myFile', __dirname + '/image.jpg')
var stream = fs.createReadStream(__dirname + '/image.jpg', { encoding: 'base64' }).pipe(asset)
stream.on('finish', function() {
    done()
})

ProjectAsset看起来像这样,但是我不知道接下来要去哪里:

'use strict'

var stream = require('stream'),
    util = require('util')

var ProjectAsset = function() {
    var self = this

    Object.defineProperty(self, 'binaryData', {
        configurable: true,
        writable: true
    })

    stream.Stream.call(self)

    self.on('pipe', function(src) {
        // does it happen here? how do I set self.binaryData?
    })

    return self
}

util.inherits(ProjectAsset, stream.Stream)

module.exports = ProjectAsset
module.exports.DEFAULT_FILE_NAME = 'file'
波尔曼

可以继承stream.Stream并使其起作用,但是根据我建议从文档中获得的内容,建议从继承stream.Writable管道成stream.Writable你需要有_write(chunk, encoding, done)规定来处理管道。这是一个例子:

var asset = new ProjectAsset('myFile', __dirname + '/image.jpg')
var stream = fs.createReadStream(__dirname + '/image.jpg', { encoding: 'base64' }).pipe(asset)
stream.on('finish', function() {
    console.log(asset.binaryData);
})

项目资产

'use strict'

var stream = require('stream'),
    util = require('util')

var ProjectAsset = function() {
    var self = this

    self.data
    self.binaryData = [];

    stream.Writable.call(self)

    self._write = function(chunk, encoding, done) {
        // Can handle this data however you want
        self.binaryData.push(chunk.toString())
        // Call after processing data
        done()
    }
    self.on('finish', function() {
        self.data = Buffer.concat(self.binaryData)
    })

    return self
}

util.inherits(ProjectAsset, stream.Writable)

module.exports = ProjectAsset
module.exports.DEFAULT_FILE_NAME = 'file'

如果您还希望阅读的内容stream,请查看继承自stream.Duplex_read(size)方法并包括该方法。

如果您正在做一些更简单的事情,还可以使用简化的构造函数api

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章