首页 > 解决方案 > puppeteer(chromium) 无法在 nodejs 生产服务器上工作

问题描述

我有一个后端 api,它接收从前端发送的 HTML 字符串,并使用 puppeteer 生成一个 pdf 文件,然后将原始数据返回到前端。

exports.createPdf = async (req, res) => {
    const { resumeContent, pageSize } = req.body;
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.setContent(resumeContent);
    const resumePdf = await page.pdf(
        {
            margin: {
                top: '20px',
                bottom: '20px'
            },
            format: pageSize
        }
    );
    await browser.close();
    const base64ResumePdf = resumePdf.toString('base64');
    res.set({
        'Content-Type': 'application/pdf',
        'Content-Length': base64ResumePdf.length
    });
    res.send(base64ResumePdf);
};

一切都在当地环境中完美运行。

但是,在生产(和 UAT)服务器上,请求状态始终处于等待状态 30 秒,然后变为取消。如果我双击取消的请求,它将进入我们官方网站上的 404 页面,没有任何有用的信息。 在此处输入图像描述

在此处输入图像描述

我只能怀疑 puppeteer 无法在真实服务器上正常工作。也许打开铬有一些限制或身份验证?

有没有人有关于如何解决这个问题的建议?

标签: node.jspuppeteerbackendchromium

解决方案


https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md#running-puppeteer-on-aws-lambda

我们的生产服务器在 AWS EC2 上,所以我似乎需要进行一些 EC2 或 lambda 操作。


推荐阅读