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

Node调用AWS Lambda报错:Unexpected token u in JSON at position 0

问题排查与修复方案

核心问题分析

  1. Payload显示为字典的原因:AWS Lambda在接收RequestResponse类型的调用时,会自动将传入的JSON字符串格式Payload解析为JavaScript对象(即你看到的字典形式),所以目标Lambda日志里的{'name':'Helen','age':23}是解析后的正常结果,并非发送时的格式错误。
  2. "Unexpected token u"错误原因:该错误几乎都是执行JSON.parse(undefined)导致的。大概率是目标Lambda函数错误地对已被Lambda平台解析过的event再次执行JSON.parse(),或是调用代码在处理返回值时,尝试解析未定义的内容。

修复步骤

步骤1:修正目标Lambda(pdf-generator)的代码

如果目标Lambda存在以下错误写法:

exports.handler = async (event) => {
  // 错误:event已经是解析后的对象,无需再次parse
  const data = JSON.parse(event);
  // ...其他逻辑
};

直接改为使用解析后的event对象:

exports.handler = async (event) => {
  // 正确:直接使用Lambda平台解析后的对象
  const data = event;
  console.log(data.name); // 输出Helen
  // ...其他逻辑
};

步骤2:修复调用方的返回值处理逻辑

当前代码仅获取了调用结果,未正确处理返回的Payload。Lambda返回的response.Payload是Buffer对象,需先转为字符串再解析:

const response = await lambda.invoke(params).promise();
// 正确处理返回的Payload
const result = JSON.parse(response.Payload.toString());
// ...后续业务逻辑

跳过toString()直接解析Buffer,也会引发JSON解析错误。

步骤3:验证发送前的Payload格式(可选)

可以添加日志确认发送前的Payload是否为标准JSON字符串:

const datar = {"name":"Helen","age":"23"};
const payloadStr = JSON.stringify(datar);
console.log('发送的Payload:', payloadStr); // 应输出{"name":"Helen","age":"23"}

const params = {
  FunctionName: 'pdf-generator',
  InvocationType: 'RequestResponse',
  LogType: 'None',
  Payload: payloadStr,
};

const response = await lambda.invoke(params).promise();

额外注意事项

  • 确保AWS SDK初始化正确(以v2版本为例):
const AWS = require('aws-sdk');
AWS.config.update({ region: '你的Lambda所在区域' });
const lambda = new AWS.Lambda();
  • 若使用AWS SDK v3,调用逻辑需调整,需确认项目依赖的是aws-sdk(v2)还是@aws-sdk/client-lambda(v3)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:55:10