You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda部署Highcharts导出服务器遇JSON解析错误求助

解决Highcharts导出服务器在AWS Lambda Docker容器中的PhantomJS语法错误问题

问题根源

Highcharts 9.2.2引入了ES6语法(比如let关键字),但你当前使用的PhantomJS版本基于老旧的WebKit内核,在严格模式下不支持let,导致worker.js抛出语法错误,错误信息附加在正常的base64响应前,破坏了JSON结构,最终触发JSON解析失败。

可行解决方案

1. 替换PhantomJS为Puppeteer(推荐)

PhantomJS已停止维护,Highcharts官方也推荐用Puppeteer替代它作为导出引擎。

  • 修改Highcharts导出服务器配置,将导出引擎切换为Puppeteer:
    在启动命令或配置文件中设置--enable-server --engine puppeteer,或在代码中指定:
    const exporter = require('highcharts-export-server');
    exporter.initPool({
        type: 'puppeteer',
        puppeteer: {
            headless: 'new' // 适配新版Chrome无头模式
        }
    });
    
  • 在Docker镜像中安装Puppeteer依赖:使用node:XX-slim基础镜像,安装Chrome依赖包,比如libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxrandr2 libgbm1 libasound2。

2. 降级Highcharts版本到兼容PhantomJS的版本

若必须保留PhantomJS,选择Highcharts 8.x及以下版本,这些版本未大量使用ES6语法,可兼容旧版PhantomJS:

  • 修改项目依赖:
    npm install highcharts@8.2.2 highcharts-export-server@3.0.0
    
  • 重新构建Docker镜像,确保依赖版本正确。

3. 补丁修复worker.js(临时方案)

若不想换引擎也不想降级,可手动修改worker.js中的let为var:

  • 在Docker构建过程中添加替换命令:
    RUN sed -i 's/let /var /g' node_modules/highcharts-export-server/lib/phantomjs/worker.js
    
  • 注意:该方法可能引发未知问题,仅作为临时应急方案,不推荐长期使用。

验证步骤

  1. 重新构建Docker镜像并部署到AWS Lambda
  2. 调用导出接口,检查响应是否仅返回正常JSON结构,无错误信息混入
  3. 验证base64编码的图表图片可正常解码显示

内容的提问来源于stack exchange,提问作者Ben Stilwell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:33:14