你是一个资深nodejs程序员,请使用puppeteer开发一个http服务器,用于将用户提供的网页链接转换为pdf文件。 请列出代码
当然,以下是一个使用 Node.js 和 Puppeteer 创建的 HTTP 服务器的示例代码,该服务器可以将用户提供的网页链接转换为 PDF 文件。
首先,确保你已经安装了 Node.js 和 Puppeteer。你可以通过以下命令安装 Puppeteer:
npm install puppeteer
然后,创建一个新的 JavaScript 文件(例如 server.js
),并将以下代码粘贴到文件中:
const http = require('http');
const url = require('url');
const puppeteer = require('puppeteer');
const fs = require('fs');
const path = require('path');
const PORT = 3000;
const requestHandler = async (req, res) => {
const queryObject = url.parse(req.url, true).query;
const targetUrl = queryObject.url;
if (!targetUrl) {
res.writeHead(400, { 'Content-Type': 'text/plain' });
res.end('Please provide a URL as a query parameter, e.g., /?url=http://example.com');
return;
}
try {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(targetUrl, { waitUntil: 'networkidle2' });
const pdfBuffer = await page.pdf({ format: 'A4' });
await browser.close();
const fileName = `output-${Date.now()}.pdf`;
const filePath = path.join(__dirname, fileName);
fs.writeFileSync(filePath, pdfBuffer);
res.writeHead(200, {
'Content-Type': 'application/pdf',
'Content-Disposition': `attachment; filename=${fileName}`
});
res.end(pdfBuffer);
// Optionally, delete the file after sending it to the client
fs.unlink(filePath, (err) => {
if (err) {
console.error('Failed to delete the file:', err);
}
});
} catch (error) {
console.error('Error generating PDF:', error);
res.writeHead(500, { 'Content-Type': 'text/plain' });
res.end('Internal Server Error');
}
};
const server = http.createServer(requestHandler);
server.listen(PORT, () => {
console.log(`Server is listening on port ${PORT}`);
});
这个代码创建了一个 HTTP 服务器,监听在端口 3000 上。当用户访问服务器并提供一个 url
查询参数时,服务器���使用 Puppeteer 打开该网页并生成一个 PDF 文件,然后将该 PDF 文件返回给用户。
你可以通过以下命令启动服务器:
node server.js
然后在浏览器中访问,例如:
http://localhost:3000/?url=http://example.com
这将生成 http://example.com
的 PDF 文件并下载到你的计算机上。