如何部署基于express.js与puppeteer开发的REST API应用
Puppeteer项目部署Heroku无返回问题解决思路
- Puppeteer运行环境配置
Heroku默认不包含Chromium运行所需的系统依赖,你需要先在Heroku项目的设置页添加Puppeteer对应的官方buildpack。同时要修改你爬虫文件中Puppeteer的启动配置,新增--no-sandbox、--disable-setuid-sandbox、--headless=new三个启动参数,无界面环境下缺少这些参数会导致浏览器无法启动,爬虫直接报错。 - 路由逻辑优化
你当前的根GET路由中连续调用了3次scrapeProductSecond(),每一次调用都会重新启动浏览器执行爬取逻辑,不仅会造成数据不一致,还会大幅拉长请求响应耗时。建议调整为仅调用一次该函数,再从返回结果中解构出你需要的三个字段:app.get('/', async(req, res) =>{ const scrapeRes = await scrapeProductSecond() const {echipeAcasa, echipeDeplasare, theIds} = scrapeRes console.log(typeof echipeAcasa, typeof echipeDeplasare, typeof theIds); console.log(echipeAcasa, echipeDeplasare, theIds); res.status(201).send([echipeAcasa, echipeDeplasare, theIds]) }) - 超时与异常处理
Heroku的HTTP请求默认超时时间为30秒,爬虫耗时超过30秒会被平台主动断开连接。你可以优化爬虫逻辑,复用Puppeteer的浏览器实例,不要每次请求都重新启动浏览器,能大幅降低请求耗时。同时建议给所有路由的异步逻辑套上try/catch捕获异常,出错时返回对应的错误信息,方便排查具体故障点。 - 端口日志修正
你当前监听端口的回调日志打印的是固定的本地端口值,建议修改为打印实际监听的端口,方便排查部署后的端口监听问题:app.listen(process.env.PORT || port, ()=> console.log("Example app listening on port " + (process.env.PORT || port)))
内容的提问来源于stack exchange,提问作者Tom Ghe
相关产品推荐
相关产品推荐

