使用 NodeJS 正确发送文件

Proper send file with NodeJS

考虑以下相当简单的中间件:

(req, res, next) => {
  const stream = fs.createReadStream(req.filePath)

  await new Promise((resolve, reject) => stream    
    .on('error', reject)
    .on('end', resolve)
    .pipe(res, { end: false })
    .on('error', reject)
    // 'close' is emitted if client prematurely disconnects.
    .on('close', resolve)
  res.end()
}

有几个问题我不确定如何处理:

这似乎可以解决问题:

import onFinished from 'on-finished'

(req, res, next) => {
  const stream = fs.createReadStream(req.filePath)

  onFinished(res, () => stream.destroy && stream.destroy())

  if (onFinished.isFinished(res)) {
    return
  }

  await new Promise((resolve, reject) => stream    
    .on('error', reject)
    .on('end', resolve)
    .pipe(res, { end: false })
    .on('error', reject)
    // 'close' is emitted if client prematurely disconnects.
    .on('close', resolve)
  res.end()
}