fast72 commited on
Commit
49f4a83
·
verified ·
1 Parent(s): 9d874e7

Update server.js

Browse files
Files changed (1) hide show
  1. server.js +29 -19
server.js CHANGED
@@ -4,33 +4,43 @@ const { chromium } = require("playwright");
4
  const app = express();
5
 
6
  app.get("/:url", async (req, res) => {
 
7
  try {
8
- const { url } = req.params;
9
- if (!url.trim()) return res.sendStatus(400);
10
-
11
- const browser = await chromium.launch({
12
- args: [
13
- '--incognito',
14
- '--single-process',
15
- '--no-sandbox',
16
- '--no-zygote',
17
- '--no-cache'
18
- ],
 
 
 
 
 
 
 
 
 
19
  executablePath: process.env.CHROME_BIN,
20
- headless: true
21
  });
 
22
  const page = await browser.newPage();
23
- await page.goto(url);
24
- const buffer = await page.screenshot();
25
 
26
- res.setHeader("Content-Type", "image/jpeg");
 
27
  res.send(buffer);
28
-
29
- } catch (err) {
30
- console.error(err);
31
  res.sendStatus(500);
32
  } finally {
33
- if (browser) await browser.close()
34
  }
35
  });
36
 
 
4
  const app = express();
5
 
6
  app.get("/:url", async (req, res) => {
7
+ let browser;
8
  try {
9
+ let { url } = req.params;
10
+ url = decodeURIComponent(url);
11
+ if (!url.trim().startsWith("http")) return res.sendStatus(400);
12
+
13
+ const { type, width, height } = req.query;
14
+ const viewports = {
15
+ desktop: { width: 1280, height: 720 },
16
+ mobile: { width: 375, height: 812, isMobile: true },
17
+ tablet: { width: 768, height: 1024, isMobile: true },
18
+ };
19
+
20
+ let viewport;
21
+ if (width && height) {
22
+ viewport = { width: parseInt(width), height: parseInt(height) };
23
+ } else {
24
+ viewport = viewports[type] || viewports.desktop;
25
+ }
26
+
27
+ browser = await chromium.launch({
28
+ args: ["--incognito", "--single-process", "--no-sandbox", "--no-zygote", "--no-cache"],
29
  executablePath: process.env.CHROME_BIN,
30
+ headless: true,
31
  });
32
+
33
  const page = await browser.newPage();
34
+ await page.setViewportSize(viewport);
35
+ await page.goto(url, { waitUntil: "load", timeout: 10000 });
36
 
37
+ const buffer = await page.screenshot();
38
+ res.setHeader("Content-Type", "image/png");
39
  res.send(buffer);
40
+ } catch {
 
 
41
  res.sendStatus(500);
42
  } finally {
43
+ if (browser) await browser.close();
44
  }
45
  });
46