'How to convert ReadableStream into ReadStream in NodeJS?
I'm using nodemailer, and pdfmake to create a pdf, and send it in the email's attachments. I don't have too much experience with file handling in NodeJS, and I can't make it work.
See example where the file is saved. As I've checked the types, createPdfKitDocument
returns an extension of NodeJS.ReadableStream
.
In nodemailer I can include attachments as Stream
or Readable
See documentation.
However, I'm not able to send the attachment without saving it, and give the path to the file.
I tried to provide the ReadableStream
returned from createPdfKitDocument
as is, it result in hanging promise. I tried to wrap it with Readable.from()
, it didn't work. I tried to call .read()
on the result, and it didn't result in hanging promise, but the pdf cannot be opened.
Any ideas how can I convert a ReadableStream
to Readable
, or Buffer
?
Solution 1:[1]
NodeJS.ReadableStream
type streams are used in older NodeJS libraries and versions. You can use the wrap
method in Readable
to convert NodeJS.ReadableStream
to Readable stream.
const { OldReader } = require('./old-api-module.js');
const { Readable } = require('node:stream');
const oreader = new OldReader(); // will return stream of NodeJS.ReadableStream
const myReader = new Readable().wrap(oreader);
myReader.on('readable', () => {
myReader.read(); // etc.
});
Ref: https://nodejs.org/api/stream.html#stream_readable_wrap_stream. For additional info do refer this as well https://nodejs.org/api/stream.html#compatibility-with-older-nodejs-versions
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | v1shva |