Update server.js
Browse files
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 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
executablePath: process.env.CHROME_BIN,
|
| 20 |
-
headless: true
|
| 21 |
});
|
|
|
|
| 22 |
const page = await browser.newPage();
|
| 23 |
-
await page.
|
| 24 |
-
|
| 25 |
|
| 26 |
-
|
|
|
|
| 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 |
|