Skip to content

Instantly share code, notes, and snippets.

@hyzyla
Created February 10, 2019 16:54
Show Gist options
  • Save hyzyla/8ec5afa34531141c7e56463ddd3e00ba to your computer and use it in GitHub Desktop.
Save hyzyla/8ec5afa34531141c7e56463ddd3e00ba to your computer and use it in GitHub Desktop.
Chromium page per handler with Puppeteer and Express.js
const puppeteer = require('puppeteer');
const express = require('express');
const asyncHandler = require('express-async-handler');
(async () => {
// initialise Express.js framework
const app = express();
// start chromium browser
let browser = await puppeteer.launch({headless: true});
// browser restart
browser.addListener('disconnected', async () => {
browser = await puppeteer.launch({headless: true});
});
// empty page for preventing browser closing
await browser.newPage();
// routes
app.get('/', asyncHandler(async (request, response) => {
console.log((await browser.pages()).length);
const url = request.query.url;
// TODO: validation
const page = await browser.newPage();
await page.goto(url);
const buffer = await page.pdf({format: 'A4'});
await page.close();
response.type('pdf');
response.send(buffer);
}));
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment