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

在AWS Lambda中使用Wkhtmltopdf测试失败,请求技术支持

解决AWS Lambda中Wkhtmltopdf转PDF时的TypeError: Cannot read property 'toString' of null错误

这个错误的根源很清晰:你的/var/task/index.js第25行代码尝试对一个null值调用toString()方法,直接导致Lambda进程提前退出。结合CloudWatch的调用栈来看,错误发生在AWS SDK的请求响应回调里,大概率和S3对象读取或请求参数处理有关。

下面是具体的排查和修复步骤:

1. 定位第25行的具体代码

先打开你的index.js文件找到第25行,这类错误的代码通常类似:

const htmlContent = response.Body.toString();

这里的response.Body是null,所以调用toString()时抛出了异常。

2. 排查异步操作的返回值

从调用栈能看出错误来自AWS SDK的请求回调(比如S3的getObject方法),优先检查这几个点:

  • 你指定的S3 Bucket名称是否正确,目标HTML文件是否确实存在于该Bucket中?
  • Lambda的执行角色是否拥有该S3 Bucket的s3:GetObject权限?权限不足时S3会返回空Body或错误响应。
  • 如果HTML内容来自API Gateway请求体,要确认测试请求是否正确传递了内容,有没有出现event.body为null的情况?

3. 添加空值判断修复代码

不管是哪种场景,在调用toString()前先判断值是否存在,就能避免这个错误。给两个常见场景的修复示例:

场景1:从S3读取HTML内容

s3.getObject(params, (err, response) => {
  if (err) {
    console.error("从S3获取内容失败:", err);
    callback(err);
    return;
  }
  // 先判断Body是否存在再调用toString()
  if (!response.Body) {
    const error = new Error("获取内容失败:S3对象Body为空");
    console.error(error.message);
    callback(error);
    return;
  }
  const htmlContent = response.Body.toString();
  // 后续Wkhtmltopdf处理逻辑
});

场景2:从API Gateway请求体获取HTML内容

exports.handler = (event, context, callback) => {
  // 检查请求体是否存在
  if (!event.body) {
    const error = new Error("请求体缺失:需要传入HTML内容");
    console.error(error.message);
    callback(error);
    return;
  }
  const htmlContent = event.body.toString();
  // 后续处理逻辑
};

4. 重新测试并查看日志

修复代码后重新部署Lambda并测试,如果还有问题,查看CloudWatch完整日志,确认异步操作的具体错误(比如S3权限错误、对象不存在错误),再针对性解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:00:38