Javascript 如何为node.js流管道创建目标路径?

Javascript 如何为node.js流管道创建目标路径?,javascript,node.js,stream,coffeescript,Javascript,Node.js,Stream,Coffeescript,我想通过管道将node.js流传输到输出文件中。但我也希望在开始管道之前确保输出目标存在。以下代码的问题是,管道中的事件处理程序添加得很晚(在调用assurePathcallback之后),因此数据在输入流中不再可用。我不想使用sync fs方法来阻止整个过程 assurePath = (path, callback) -> path = path.split path.sep i = 0 async.eachSeries path[1...path.length-1], (s

我想通过管道将node.js流传输到输出文件中。但我也希望在开始管道之前确保输出目标存在。以下代码的问题是,管道中的事件处理程序添加得很晚(在调用
assurePath
callback之后),因此数据在输入流中不再可用。我不想使用sync fs方法来阻止整个过程

assurePath = (path, callback) ->
  path = path.split path.sep
  i = 0
  async.eachSeries path[1...path.length-1], (segment, callback) =>
    i++
    p = path[0..i].join path.sep
    fs.exists p, (exists) =>
      return callback() if exists
      fs.mkdir p, callback
  ,
    callback

saveStream = (filename, stream, callback) ->
  path = fullPath filename
  assurePath path, (error) ->
    return callback error if error

    finished = false
    stream.on('error', (error) ->
      return if finished
      finished = true
      callback error
    ).pipe(
      fs.createWriteStream path
    ).on('finish', ->
      return if finished
      finished = true
      callback()
    ).on('error', (error) ->
      return if finished
      finished = true
      callback error
    )
您可以在调用
assurePath
之前尝试,然后在回调中尝试:

saveStream=(文件名、流、回调)->
stream.pause()
路径=完整路径文件名
路径(错误)->
stream.resume()
# ...

调用
.pause()
将导致
流停止发送数据事件。任何可用的数据都将保留在内部缓冲区中。在
assurePath
回调中调用
.resume()
将导致您的
恢复发送数据事件。

在调用
assurePath
之前以及在回调中您是否尝试过?现在无法测试它,但我认为它可能会帮助您。添加它作为答案。