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

如何从AWS Lambda返回HTTP响应(搭配HTTP API Gateway)

解决方案:Lambda + HTTP API Gateway 正确返回响应

你的问题出在直接返回SES的Promise结果——API Gateway的HTTP集成要求Lambda返回特定格式的响应对象,而不是SES调用的原始返回值。下面是修改后的代码,实现成功返回提示、错误返回信息的需求:

const aws = require("aws-sdk");
const ses = new aws.SES();

exports.handler = async function (event) {
  try {
    // 解析请求体,同时处理解析失败的情况
    let requestBody;
    try {
      requestBody = JSON.parse(event.body);
    } catch (parseErr) {
      return {
        statusCode: 400,
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({ error: "请求格式错误,无法解析JSON" })
      };
    }

    const { name, email, phone, message } = requestBody;

    // 验证必填字段,避免空值导致邮件发送失败
    if (!name || !email || !message) {
      return {
        statusCode: 400,
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({ error: "姓名、邮箱、留言为必填项" })
      };
    }

    const params = {
      Destination: {
        ToAddresses: ["你的接收邮箱"],
      },
      Message: {
        Body: {
          Text: { 
              Data: `Hello from Lambda! 你收到了来自${name}的消息。\n联系方式:\n - 邮箱:${email}\n - 电话:${phone}\n留言内容:${message}` 
          },
        },
        Subject: { Data: `来自${name}的咨询` },
      },
      Source: "你的发件邮箱",
    };

    // 执行邮件发送
    await ses.sendEmail(params).promise();

    // 发送成功,返回200响应
    return {
      statusCode: 200,
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ success: true, message: "邮件发送成功,我们会尽快回复你" })
    };

  } catch (err) {
    // 捕获所有错误,返回500或对应错误信息
    console.error("邮件发送失败:", err);
    return {
      statusCode: 500,
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ error: "邮件发送失败,请稍后重试", details: err.message })
    };
  }
};

关键修改说明:

  • 响应格式标准化:所有返回结果都遵循API Gateway要求的结构,包含statusCode(HTTP状态码)、headers(指定返回JSON格式)、body(JSON字符串化的内容)。
  • 错误分层处理:
    • 先捕获JSON解析错误,返回400请求错误
    • 验证必填字段,提前拦截无效请求
    • 捕获SES发送过程中的异常,返回500服务器错误并记录日志
  • 简化函数参数:async函数模式下不需要context和callback参数,直接用return返回响应即可。

这样修改后,前端表单就能收到清晰的成功/错误提示,不会再触发500服务器错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:30:24