【问题标题】:node, How to handle/catch pipe节点,如何处理/捕获管道
【发布时间】:2014-04-25 20:31:35
【问题描述】:

我已经看过并阅读了一些教程,这些教程表明您可以像乐高积木一样将一个流传输到另一个流,但是我找不到任何关于如何在将流通过管道传输到您的对象时捕获管道命令的任何内容。

我的意思是我如何创建一个具有函数的对象以便我可以做到:

uploadWrapper = function (client, file, callback) {
  upload = function (client,file,callback){
    var file = file
    // this.data = 'undefined'
    stream.Writable.call(this);
    this.end = function () {
        if(typeof this.data !== 'undefined') file.data = this.data
        callback(file.data,200)
    }
    // var path = urlB.host('upload').object('files',file.id).action('content').url
    // // client.upload(path,file,callback)
  }
  util.inherits(upload,stream.Writable)

  upload.prototype._write = function (chunk, encoding, callback) {
    this.data = this.data + chunk.toString('utf8')
    callback()
  }

      return new upload(client,file,callback)
}
exports.upload = uploadWrapper

当数据通过管道传输到我的对象时,我该如何处理?

我看过但我真的找不到任何关于这个的东西(也许我没有看过写的地方?)。

谁能指出我正确的方向?

如果知道它有帮助,我想做的就是捕获一个数据流并构建一个包含二进制编码数据的字符串;无论是来自文件流还是来自服务器的请求流(即多部分请求的文件中的数据)对象。

编辑:我已经更新了记录数据的代码

编辑:我已经修复它,我现在可以接收管道数据,我必须将代码放在返回实现流的函数的包装器中。

编辑:现在不同的问题,_read 中的this.data 不是以上传功能中的this.data 可以读取的方式存储。

编辑:好的,现在我可以处理回调并捕获数据,我需要弄清楚如何判断数据是通过管道传输到它还是作为普通函数使用。

【问题讨论】:

  • 听起来你让这变得比它需要的更复杂。如果您只想处理来自文件流的传入数据,只需添加一个.on('data', cb); 事件处理程序。如果您确实需要将其通过管道传输到您的对象,请确保您的对象是可写流。
  • 你的意思是这样的吗?(见改变的例子)
  • 什么是client?是否可以流式传输上传而不是缓冲写入流中的所有数据?
  • Client 是我构建的一个模块,它是我一直在开发的 SDK for box 的一部分。文件上传工作,但目前必须直接(从服务器上的文件)或从包含二进制编码数据的字符串提供数据。至少有了这个(管道),它可以让我从传入的流中捕获数据,比如来自多部分表单或文件流或任何流。
  • 我仍然认为处理这个问题的最好方法是添加一个on data 处理程序,而不是与pipe 混为一谈,我以后也许可以写一个这样的例子。除此之外,您已经开始走上正确的道路,使您的对象成为可写流,所以如果这是您想要采取的路线,请继续遵循,我也会看看我可以在这个选项上添加什么。跨度>

标签: node.js node.js-stream


【解决方案1】:

如果您想创建自己的可以通过管道传输和/或传输的流,请查看节点 docs for implementing streams

【讨论】:

  • 我明天会好好看看这个,但我想这可能正是我想要的。
  • 这行得通吗?(请参阅更新的代码示例)我想要捕获的是来自文件的数据,并将其以二进制编码形式放置,无论它来自多部分发布请求的请求流还是来自文件流那么我如何区分(从文件和表单流)并捕获它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 2018-07-07
  • 2023-04-07
  • 2017-06-22
  • 1970-01-01
  • 2011-06-14
  • 2013-08-20
相关资源
最近更新 更多