Node.js,流,文件和错误处理

时间:2018-08-06 19:26:25

标签: javascript node.js express busboy

问题

  1. 如何使用流优雅地处理错误?我的代码变得非常丑陋,在每.on('error', () => …)后添加.pipe(…)会让人感到痛苦。还有另一种方法吗?我读到有关NodeJS domain的信息,但已弃用。

  2. 如果错误发生在流的中间位置,您将如何处理?在我的情况下,到那时,已经 some 的转换内容已经转移回用户了。

我的用例是:

  1. 用户通过典型的多部分<form>上传文本文件。
  2. 然后使用流动态转换该文件。
  3. 作为流的结果将通过管道传输回用户并触发下载。

简而言之:添加文件,提交表单,然后返回转换后的文件。

代码示例

以下代码使用express处理HTTP请求,使用busboy处理文件上传:

export default Router()
  .get('/', renderPage)
  .post('/', (req, res, next) => {
    const busboy = new Busboy({ headers: req.headers })

    const parser = myParser()

    const transformer = myTransformer()

    busboy.on('file', (_fieldname, file, filename) => {
      res.setHeader('Content-disposition', `attachment; filename=${filename}`)

      file
        .pipe(parser)
        .on('error', err => errorHandler(err, req, res))
        .pipe(transformer)
        .on('error', err => errorHandler(err, req, res))
        .pipe(res)
        .on('error', err => errorHandler(err, req, res))
    })
      .on('error', err => errorHandler(err, req, res))

    req.pipe(busboy)
      .on('error', err => errorHandler(err, req, res))
  })

1 个答案:

答案 0 :(得分:1)

您应该签出pump。似乎可以解决您的问题。