Node и PDFKit - как отделить бизнес-логику генерации PDF от маршрутизатора - PullRequest
1 голос
/ 26 сентября 2019

Я работаю над веб-приложением, используя Express и Node.js.Маршрутизатор api в настоящее время имеет метод GET generatePDF для создания PDF с библиотекой PDFKit.

'use strict';

var express = require('express');
var router = express.Router();

const PDFDocument = require('pdfkit');

router.get('/generatePDF', async function(req, res, next) {
    var text = req.params.text;

    var myDoc = new PDFDocument({bufferPages: true});

    let buffers = [];

    myDoc.on('data', buffers.push.bind(buffers));
    myDoc.on('end', () => {
        let pdfData = Buffer.concat(buffers);
        res.writeHead(200, {
            'Content-Length': Buffer.byteLength(pdfData),
            'Content-Type': 'application/pdf',
            'Content-disposition': 'attachment;filename=report.pdf'
        }).end(pdfData);
    });

    const lorem = text;

    myDoc.fontSize(8);    

    myDoc.text(`This text is left aligned. ${lorem}`, {
        align: 'left'
    });

    myDoc.moveDown();
    myDoc.text(`This text is centered. ${lorem}`, {
        align: 'center'
    });

    myDoc.moveDown();
    myDoc.text(`This text is right aligned. ${lorem}`, { 
        align: 'right'
    });

    myDoc.moveDown();
    myDoc.text(`This text is justified. ${lorem}`, { 
        align: 'justify'
    });

    myDoc.end();
});

Не рекомендуется смешивать бизнес-логику с контроллером (маршрутизатором) в качестве веб-интерфейса.приложение растет, также с точки зрения повторного использования.Я новичок в PDFKit и мне интересно, как я могу разделить часть PDFKit на отдельный Javascript PDFGenerator.js и заставить его вызываться маршрутизатором, включая:

const PDFGenerator = require('../PDFGenerator');
...