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

升级Node.js18.x与AWS SDK V3后Lambda Payload解析异常求助

问题原因及解决方案
  • 被调用Lambda的错误未被正确处理
    AWS SDK V3的InvokeCommand和V2行为存在关键差异:V2中如果被调用的Lambda返回FunctionError,会直接抛出异常,你之前的代码不会走到JSON解析步骤;但V3会把错误信息存入Payload,同时标记data.FunctionError字段。此时Payload里的内容不是你预期的业务JSON,而是Lambda的错误栈(比如Error: xxx, ...这类带逗号的非标准格式),自然会触发JSON解析失败。

  • Payload存在截断或编码问题
    本地SAM调用环境稳定,但线上偶尔的网络波动可能导致Payload传输不完整;另外如果目标Lambda返回的内容不是UTF-8编码,Buffer.from(...).toString()会出现乱码,进而引发解析错误。

修复代码示例

const data = await lambdaClient.send(new InvokeCommand(params));

// 优先检查函数错误标识
if (data.FunctionError) {
  const errorMsg = Buffer.from(data.Payload).toString('utf-8');
  throw new Error(`被调用Lambda执行出错: ${errorMsg}`);
}

// 明确指定UTF-8编码解析Payload,并增加异常捕获
let response;
try {
  response = JSON.parse(Buffer.from(data.Payload).toString('utf-8'));
} catch (parseErr) {
  // 打印原始Payload用于排查问题
  console.error('JSON解析失败,原始内容:', Buffer.from(data.Payload).toString('utf-8'));
  throw parseErr;
}

额外排查建议

  1. 给被调用的Lambda添加全局错误捕获,确保所有异常都被处理并返回标准JSON格式的响应,避免直接抛出未捕获的异常。
  2. 线上出现错误时,查看调用方Lambda的日志,打印data.Payload的原始内容,就能直接定位是业务响应异常还是错误信息导致的解析失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:33:11