如何将 Node.js 流的内容读取到字符串变量中?

2022-08-30 01:23:20

我正在入侵一个使用smtp协议捕获SMTP电子邮件并对邮件数据采取行动的Node程序。该库以流的形式提供邮件数据,我不知道如何将其转换为字符串。

我目前正在用 将 它 写入 stdout,但正如我所说,我需要字符串中的流数据,一旦流结束,我就可以使用它。stream.pipe(process.stdout, { end: false })

如何将 Node.js 流中的所有数据收集到字符串中?


答案 1

另一种方法是将流转换为 promise(参考下面的示例),并使用 (or ) 将解析的值分配给变量。thenawait

function streamToString (stream) {
  const chunks = [];
  return new Promise((resolve, reject) => {
    stream.on('data', (chunk) => chunks.push(Buffer.from(chunk)));
    stream.on('error', (err) => reject(err));
    stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
  })
}

const result = await streamToString(stream)

答案 2

以上这些都不适合我。我需要使用 Buffer 对象:

  const chunks = [];

  readStream.on("data", function (chunk) {
    chunks.push(chunk);
  });

  // Send the buffer or you can put it into a var
  readStream.on("end", function () {
    res.send(Buffer.concat(chunks));
  });