问题

  • 如何使用流优雅地处理错误?我的代码变得非常丑陋,并且在每个.on('error', () => …)感到痛苦之后添加.pipe(…)。还有另一种方法吗?我读到有关NodeJS domain的信息,但已弃用。
  • 如果错误出现在流的中间位置,您如何处理错误?在我的情况下,到那时,某些转换后的内容已经转移回了用户。

  • 我的用例是:
  • 用户通过典型的多部分<form>上传文本文件。
  • 然后使用流即时转换该文件。
  • 作为流的结果将通过管道传输回用户并触发下载。

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

    代码示例

    以下代码使用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))
      })
    

    最佳答案

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

    关于javascript - Node.js,流,文件和错误处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51714410/

    10-12 07:28
    查看更多