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

全通配符配置下Lambda触发CORS预检失败及数据读取异常问题

问题:JavaScript+Lambda+SES联系表单HTTP调用失败,控制台测试正常

问题现象

  • Lambda控制台测试时邮件发送正常,但前端通过HTTP调用时失败
  • 浏览器控制台报CORS相关错误
  • CloudWatch日志显示KeyError: 'name';改用event.get()方法后CORS错误消失、邮件可生成,但所有字段值均为None,且日志显示请求数据已正常传输

浏览器错误信息

控制台提示跨域资源共享请求被阻止

Lambda函数代码(初始版本)

import boto3
import json

ses = boto3.client('ses')

def lambda_handler(event, context):

    name = event['name']
    email = event['email']
    phone_number = event['phone_number']
    message = event['message']

    # 构造邮件内容
    subject = f"New message from {name}"
    body = f"From: {name}\nEmail: {email}\nPhone: {phone_number}\nMessage: {message}"
    sender = 'myemail@somedomain.com'
    recipient = 'myemail@somedomain.com'

    # 调用SES发送邮件
    response = ses.send_email(
        Source=sender,
        Destination={
            'ToAddresses': [
                recipient,
            ]
        },
        Message={
            'Subject': {
                'Data': subject,
                'Charset': 'UTF-8'
            },
            'Body': {
                'Text': {
                    'Data': body,
                    'Charset': 'UTF-8'
                }
            }
        }
    )

    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Headers': '*',
            'Access-Control-Allow-Origin': '*',
            'Access-Control-Allow-Methods': '*'
        },
        'body': json.dumps('Email sent successfully!')
    }

前端JavaScript代码

const formEl = document.querySelector(".contact_form");

formEl.addEventListener('submit', event => {
    event.preventDefault()

    const formData = new FormData(formEl);
    const data = Object.fromEntries(formData);

    fetch('https://myapigatewayuri/prod/contact-form', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(data)
    })
    .then( response => {
        console.log('Here is the response:')
        console.log(response);
        if (response.status === 200) {
            formEl.reset();
            window.alert("Your message was sent successfully. Thank you for reaching out!")
        } else if (response.status !== 200) {
            window.alert("There was a problem sending your message.")
        }
    })
});

请求数据示例

{
    "name": "test name", 
    "phone_number": "12345678", 
    "email": "test@test.com", 
    "message": "test message"
}

CloudWatch日志信息

初始版本错误日志

{
    "errorMessage": "'name'",
    "errorType": "KeyError",
    "stackTrace": [
        "  File \"/var/task/lambda_function.py\", line 16, in lambda_handler\n    name = event['name']\n"
    ]
}

修改为event.get()后的日志(请求数据正常)

(e5f7444e-a6a5-4b8f-8f47-8f586a342a4a) Method request body before transformations: {
"name": "test name",
"phone_number": "12345678",
"email": "test@test.com",
"message": "test message"
}

已尝试的操作

  • 将Lambda中变量赋值从event['key']改为event.get('key'),CORS错误消失但字段值全为None

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:42:53