node.js - 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 无法在真实服务器上正常工作。也许打开铬有一些限制或身份验证?
有没有人有关于如何解决这个问题的建议?
解决方案
我们的生产服务器在 AWS EC2 上,所以我似乎需要进行一些 EC2 或 lambda 操作。
推荐阅读
- python - ANTLR 返回空树并且 grun 说它不能将 Python3 加载为词法分析器或解析器
- sublimetext3 - 在 Sublime Text 3 中仅查看前导/多个空格
- idris - 我如何在 Idris 中描述这种可分性?
- asp.net - 文本框控件不能接受不同数据类型的输入
- r - 子集(df,!duplicated(x))做什么?
- javascript - 似乎无法将 if..else 转换为 try..catch
- javascript - 使用 grunt 包含位于不同文件夹中的 js 文件
- c++ - 什么是代表?
- image-processing - 图像处理中一阶和二阶导数的混淆
- angular - 以Angular6的形式选择第一次就可以工作