2016-07-11 9 views
0

У меня есть код, предназначенный для отправки PDF-файла обратно в веб-браузер. В этом коде http-сервер передает поток ответов, который я могу подключить к файлу pdf.Как отключить поток для передачи между модулями

const server = http.createServer((req, res) => { 
var doc = new PDFKit({size: 'A4', layout: 'landscape', info: info, margin: 30}); 
doc.pipe(res); 
doc.text('Writing text to document'); 
doc.end(); 
}); 

Теперь я хочу использовать nodemailer для отправки тех же документов PDF, что и вложения. Поэтому я думаю, что мне нужно сделать что-то вроде этого

const Stream = require('stream').Readable; 
    const stream = new Stream(); 
    transport.sendMail({ 
    to: [email protected], 
    subject: 'Info You Wanted', 
    text: 'The data you want is in pdf attachments', 
    attachments: [{ 
    filename: 'dummy.pdf', 
    content:stream 
    }] 
}); 
const doc = new PDFKit({size: 'A4', layout: 'landscape', info: info, margin: 30}); 
doc.pipe(stream); 
doc.text('Writing text to document'); 
doc.end(); 

Здесь я смущен. Правильно ли это? Документы подразумевают, что я должен распространять Readable, но я не уверен, что

ответ

0

Вот как это сделать:

Создать класс расширений с stream.PassTrough

const PassThrough = require('stream').PassThrough; 
    class Tunnel extends PassThrough { 
    constructor() { 
     super(); 
    } 
    setHeader() { 
     //no op 
    } 
    } 

Создать новый экземпляр этого класса и передать его в DOC и почтовых вложений

const tunnel = new Tunnel(); 
    transport.sendMail({ 
    to: [email protected], 
    subject: 'Info You Wanted', 
    text: 'The data you want is in pdf attachments', 
    attachments: [{ 
    filename: 'dummy.pdf', 
    content:tunnel 
    }] 
}); 
const doc = new PDFKit({size: 'A4', layout: 'landscape', info: info, margin: 30}); 
doc.pipe(tunnel); 
doc.text('Writing text to document'); 
doc.end(); 

я имел чтобы создать небольшое изменение в обычном потоке PassThrough, потому что фактическое программное обеспечение для обработки PDF через него отвечало на HTTP-запрос и поэтому устанавливает заголовки и статус.

0

экземпляры PDFDocument являются читаемыми потоками узлов. Они не сохраняются в любом месте автоматически, но вы можете вызвать метод pipe для отправки вывода PDF-документа другому записываемому потоку Node при его написании. Когда вы закончите работу с документом, вызовите метод end, чтобы завершить его. Вот пример, показывающий, как подключиться к файлу или HTTP-ответ.

doc.pipe fs.createWriteStream ('/ путь/к/file.pdf') # запись в PDF doc.pipe Рез # HTTP-ответа

В записи и выходные методы найдены в PDFKit Перед версии 0.5 теперь осуждается

вы смотрите этот сайт для получения дополнительной информации ...... удачи ... http://pdfkit.org/docs/getting_started.html

+1

Как вы можете видеть, мой вопрос уже выполняет 'doc.pipe (res)'; (javascript версия вашего кофейного скрипта), но что это означает в контексте привязанностей к нодмайлеру. Я помещаю doc в качестве содержимого: значение в первом объекте в массиве вложений? – akc42

+0

hi akc ... вы пытаетесь преобразовать данные в строку Docs перед отправкой ... – PrabakarMarimuthu

+0

также ищите информацию, например .... https://www.npmjs.com/package/to-csv – PrabakarMarimuthu

 Смежные вопросы

  • Нет связанных вопросов^_^