我什么时候应该在 Node.js 中使用 'open' 事件?

When should I use 'open' event in Node.js?

我正在学习 Node.js,在接触事件和流主题时我遇到了这个例子:

const http = require('http');
const fs = require('fs');

http
  .createServer((req, res) => {
    const fileStream = fs.createReadStream('./some-data.txt', 'utf8');
    
    fileStream.on('open', () => {
      fileStream.pipe(res);
    });

    fileStream.on('error', (err) => {
      res.end(err);
    });
  })
  .listen(5000);

虽然我理解这段代码背后的逻辑(服务器在流的帮助下以块的形式传输一些大数据),但我不明白使用 'open' 事件的好处。 相同的代码,我只是在创建 fileStream 之后立即将数据从读取流传输到写入一个(res 对象),而不收听 'open',产生完全相同的结果。有什么区别,在什么情况下我应该听'open'?

const http = require('http');
const fs = require('fs');

http
  .createServer((req, res) => {
    const fileStream = fs.createReadStream('./some-data.txt', 'utf8');

    fileStream.pipe(res);

    fileStream.on('error', (err) => {
      res.end(err);
    });
  })
  .listen(5000);

在这种特殊情况下,是否使用 open 事件并没有什么区别。如果该文件不存在,无论如何都会发出 error 事件,您将通过 res.end(err.message) 发送它(不是 res.end(err) 失败,因为 err 是一个对象)。

open 事件告诉我们流是 open 以便我们可以在代码中处理它。