考虑以下相当琐碎的中间件:
(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()
}
有几个问题我不确定如何处理:
- 如果 res 在此中间件运行之前已经发出“关闭”,它将被卡住。
- 如果 res 发出
close
或error
如何清理源流?autoClose
只有在end
读取所有数据后才会运行。但是,如果目标失败,它是如何传播到源的?我应该总是调用destroy
源流吗?