Skip to content

Commit 223d593

Browse files
committed
Improvements
1 parent ace5182 commit 223d593

1 file changed

Lines changed: 38 additions & 24 deletions

File tree

pdf-service.js

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,21 @@ let isReady = false;
3030
let browser = null;
3131

3232
app.get('/health', (req, res) => {
33+
log('/health');
34+
3335
calls.health++;
34-
console.log('serving /health');
36+
3537
deliverJson(res, {isReady, calls}, isReady ? 200 : 503);
3638
});
3739

3840
app.post('/from-html', async (req, res) => {
41+
log('/from-html');
42+
3943
calls.fromHtml++;
44+
4045
const html = req.body.html;
4146
const options = getPdfOptions(req.body.options);
42-
const htmlFile = md5(html.substr(0, 100)) + '.html';
47+
const htmlFile = generateFileName() + '.html';
4348
const fullHtmlPath = path.join(storagePath, htmlFile);
4449

4550
fs.writeFileSync(fullHtmlPath, html);
@@ -48,9 +53,9 @@ app.post('/from-html', async (req, res) => {
4853
try {
4954
pdfFilePath = await generatePdf(`file://${fullHtmlPath}`, req.query.media, options);
5055
} catch (err) {
51-
console.log('/from-html: error generating PDF', e);
52-
let msg = 'failure generating PDF';
53-
deliverJson(res, {msg, err}, 500);
56+
log('/from-html: error generating PDF', e);
57+
deliverJson(res, {msg: 'failure generating PDF', err}, 500);
58+
5459
return;
5560
}
5661

@@ -59,23 +64,22 @@ app.post('/from-html', async (req, res) => {
5964
});
6065

6166
app.get('/from-url', async (req, res) => {
67+
log('/from-url');
68+
6269
calls.fromUrl++;
6370
let url = req.query.url;
64-
console.log('/from-url');
6571

6672
if (!url) {
67-
let msg = 'missing parameter: \'url\'';
68-
deliverJson(res, {msg, params: req.params}, 400);
73+
deliverJson(res, {msg: 'missing parameter: \'url\'', params: req.params}, 400);
6974
return;
7075
}
7176

72-
let pdfFilePath;
7377
try {
74-
pdfFilePath = await generatePdf(withHttp(url), req.query.media);
78+
let pdfFilePath = await generatePdf(withHttp(url), req.query.media);
7579

7680
deliverPdfFile(res, pdfFilePath);
7781
} catch (err) {
78-
console.log('/from-url: error generating PDF', e);
82+
log('/from-url: error generating PDF', e);
7983
let msg = 'failure generating PDF';
8084

8185
deliverJson(res, {msg, err}, 500);
@@ -93,42 +97,46 @@ function deliverJson(res, resp, status = 200) {
9397
}
9498

9599
function deliverPdfFile(res, pdfFilePath) {
96-
console.log('deliverPdfFile: going to deliver PDF', pdfFilePath);
100+
log('deliverPdfFile: going to deliver PDF', pdfFilePath);
101+
97102
const reader = fs.createReadStream(pdfFilePath);
103+
98104
res.setHeader('Content-Length', fs.statSync(pdfFilePath).size);
99105
res.setHeader('Content-Type', 'application/pdf');
100106
res.setHeader('Content-Disposition', 'inline');
101107
reader.on('open', () => {
102108
reader.pipe(res);
103109
});
104110
reader.on('close', () => {
105-
console.log('deliverPdfFile: going to remove file', pdfFilePath);
111+
log('deliverPdfFile: going to remove file', pdfFilePath);
106112
fs.unlinkSync(pdfFilePath);
107113
});
108114
}
109115

110116
async function generatePdf(url, media, options = {}) {
111-
console.log('generatePdf: browser.newPage');
117+
log('generatePdf: browser.newPage');
118+
112119
const page = await browser.newPage();
113120

114-
console.log('generatePdf: emulateMediaType');
115-
await page.emulateMediaType(media || 'screen');
121+
log('generatePdf: emulateMediaType');
116122

123+
await page.emulateMediaType(media || 'screen');
117124
await page.setViewport({
118125
width: 1200,
119126
height: 800,
120127
isMobile: false,
121128
});
122129

123-
console.log('generatePdf: goto', url);
130+
log('generatePdf: goto', url);
131+
124132
await page.goto(url, {
125133
waitUntil: 'networkidle2',
126134
});
127135

128-
let filename = md5(url) + '.pdf';
136+
let filename = generateFileName() + '.pdf';
129137
const pdfFilePath = path.join(storagePath, filename);
130138

131-
console.log('generatePdf: generate PDF', pdfFilePath);
139+
log('generatePdf: generate PDF', pdfFilePath);
132140
await page.pdf({
133141
path: pdfFilePath,
134142
scale: parseFloat(1),
@@ -142,8 +150,14 @@ async function generatePdf(url, media, options = {}) {
142150
return pdfFilePath;
143151
}
144152

145-
function md5(seed) {
146-
return crypto.createHash('md5').update(seed).digest('hex');
153+
function generateFileName() {
154+
return crypto.randomBytes(20).toString('hex')
155+
}
156+
157+
function log(message) {
158+
let date = (new Date).toLocaleString();
159+
160+
console.log(`[${date}] ${message}`);
147161
}
148162

149163
function getPdfOptions(options) {
@@ -181,8 +195,8 @@ function getPdfOptions(options) {
181195
}
182196

183197
app.listen(port, () => {
184-
console.log(`Kool PDF service running at port ${port}`);
185-
console.log('Going to start puppeter');
198+
log(`Kool PDF service running at port ${port}`);
199+
log('Going to start puppeter');
186200

187201
(async () => {
188202
browser = await puppeteer.launch({
@@ -193,7 +207,7 @@ app.listen(port, () => {
193207
],
194208
});
195209

196-
console.log('Started puppeteer; setting service state to Ready');
210+
log('Started puppeteer; setting service state to Ready');
197211
isReady = true;
198212
})();
199213
});

0 commit comments

Comments
 (0)