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

React+Axios调用AWS Lambda传递GET参数返回undefined问题排查

Axios GET请求参数无法传递到AWS Lambda,打印undefined的问题

我正在用ReactJS开发网页,需要通过Axios的GET请求向AWS Lambda传递参数,目前的代码如下:

前端Axios代码

await axios.get("endpoint-API", { 
  params: { 
    resultat_net_N1:`${resultat_net_N1_form}, ${resultat_net_N1}, ${resultat_net_N1_form_1}, ${resultat_net_N1_1}`, 
    resultat_net_N: `${resultat_net_N_form}, ${resultat_net_N}, ${resultat_net_N_form_1}, ${resultat_net_N_1}`, 
  } 
})

我也尝试过直接在URL后拼接参数的方式:

axios.get('my_endpoint/?foo=bar')

AWS Lambda代码

exports.handler = (event, context, callback) => { 
  console.log(event.queryStringParameters) 
  // 也试过
  // console.log(event.pathParameters ) 
  const response = { 
    statusCode: 200, 
    headers: { 
      'Access-Control-Allow-Origin': '*', 
      'Access-Control-Allow-Credentials': true, 
    }, 
    body: JSON.stringify('Hello from new Lambda!'), 
  }; 
};

测试时Lambda始终打印undefined,想请教下这是参数传递方式有误,还是Lambda的配置存在问题?


问题排查与解决方案

这种情况大概率是API Gateway的配置问题——你的Axios参数传递方式完全符合标准,不管是用params对象自动拼接,还是手动在URL后加参数,写法都没问题。下面分几个方向帮你排查:

1. 先确认API Gateway的类型,别搞混事件结构

AWS有两种常用的API Gateway:REST API和HTTP API,它们传给Lambda的事件格式不一样:

  • 如果你用的是REST API,查询参数确实在event.queryStringParameters里
  • 如果你用的是更轻量化的HTTP API,参数同样在event.queryStringParameters里,核心字段名是一致的。

2. 重点检查API Gateway的Lambda代理集成配置

这是最常见的坑!如果API Gateway没有开启Lambda代理集成,它不会把请求的查询参数、路径参数等自动传递到Lambda的event对象里,这时候你打印event.queryStringParameters自然是undefined。

怎么检查配置:

  • 打开AWS控制台,进入API Gateway服务,找到你的目标API
  • 找到对应的GET请求路径,进入"集成请求"设置页面
    • 要是用的REST API:确保"Lambda代理集成"的开关是开启状态,别选"Lambda集成"(非代理模式需要手动写映射模板,新手很容易出错)
    • 要是用的HTTP API:创建集成时要选择"Lambda代理"类型,默认是代理模式,但如果选错了类型也会出问题

3. 先验证前端请求是否真的带了参数

在前端发请求前,先打印一下Axios生成的完整URL,确认参数有没有正确拼接上:

const fullUrl = axios.getUri({
  url: "endpoint-API",
  params: {
    resultat_net_N1:`${resultat_net_N1_form}, ${resultat_net_N1}, ${resultat_net_N1_form_1}, ${resultat_net_N1_1}`,
    resultat_net_N: `${resultat_net_N_form}, ${resultat_net_N}, ${resultat_net_N_form_1}, ${resultat_net_N_1}`,
  }
});
console.log(fullUrl);

如果打印出来的URL末尾带了?resultat_net_N1=xxx&resultat_net_N=xxx,说明前端没问题,100%是后端配置的问题。

4. 别用Lambda默认测试事件瞎测

如果你直接在Lambda控制台用默认的测试事件运行,那肯定打不出参数——默认事件里根本没有queryStringParameters!你得手动构造一个模拟API Gateway请求的测试事件:
比如REST API的测试事件模板:

{
  "queryStringParameters": {
    "resultat_net_N1": "test_val1, test_val2, test_val3, test_val4",
    "resultat_net_N": "test_val5, test_val6, test_val7, test_val8"
  }
}

用这个事件测试,如果能正常打印出参数,说明你的Lambda代码完全没问题,问题就锁定在API Gateway上了。

最后总结

你的前端写法没毛病,问题几乎可以确定是API Gateway没开启Lambda代理集成,导致请求参数没传到Lambda的event里。先去检查集成配置,打开代理集成应该就能解决问题啦。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:53:28