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

使用AWS SES、Lambda、Gateway时遇JSON解析错误求助

解决Lambda中JSON.parse(event.body)的"Unexpected token o"错误

错误原因分析

你遇到的SyntaxError: Unexpected token o in JSON at position 1,本质是event.body已经是解析完成的JavaScript对象,不需要再调用JSON.parse()。当你对对象执行JSON.parse时,JS会先把对象转为字符串"[object Object]",解析这个字符串时,位置1的字符是o,不符合JSON语法,因此触发错误。

查看你代码里的console.log('EVENT: ', event)输出,应该能看到event.body直接是一个包含senderEmail、senderName、message的对象,而非JSON字符串。

解决方案

1. 移除多余的JSON.parse

将代码中这一行:

const { senderEmail, senderName, message } = JSON.parse(event.body)

修改为:

const { senderEmail, senderName, message } = event.body

2. 优化响应格式(满足你返回详细响应的需求)

原代码直接返回SES的Promise,返回格式可能不符合API Gateway的要求,建议用try/catch捕获异常,并返回结构化的响应:

修改后的完整代码:

const aws = require("aws-sdk");
const ses = new aws.SES({ region: "us-east-1" });
exports.handler = async function (event) {
  console.log('EVENT: ', event)
  // 直接解构已解析的event.body对象
  const { senderEmail, senderName, message } = event.body;

  const params = {
    Destination: {
      ToAddresses: ["your@email.com"],
    },
    Message: {
      Body: {
        Text: { 
            Data: `You just got a message from ${senderName} - ${senderEmail}:
            ${message}` 
        },
      },
      Subject: { Data: `Message from ${senderName}` },
    },
    Source: "your@email.com",
  };

  try {
    const sesResult = await ses.sendEmail(params).promise();
    // 返回成功响应,包含详细信息
    return {
      statusCode: 200,
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({
        success: true,
        msg: "邮件发送成功",
        sesResponse: sesResult
      })
    };
  } catch (err) {
    // 返回错误响应,包含具体错误信息
    return {
      statusCode: 500,
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({
        success: false,
        msg: "邮件发送失败",
        error: err.message
      })
    };
  }
};

关键修改说明

  • 去掉不必要的JSON.parse,直接使用已解析的event.body对象
  • 用try/catch捕获SES调用的异常,避免Lambda因未处理错误直接崩溃
  • 返回符合API Gateway规范的响应结构,包含状态码、Content-Type头部和可读的详细信息,方便前端处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:13:13