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

如何将API Gateway查询参数传递给Node.js版AWS Lambda函数

问题解决:API Gateway查询参数传递到Lambda函数的错误修复

错误原因

报错Cannot read properties of undefined (reading 'skuid')是因为代码直接访问event['queryStringParameters']['skuid'],但当queryStringParameters不存在时(比如API Gateway集成配置问题,或请求未携带参数),就会触发类型错误。另外原代码中event.skuid的写法不符合API Gateway默认的参数传递规则——query参数不会直接挂载到event根节点。

修复步骤

1. 安全获取查询参数

使用可选链操作符或分步判断,避免直接访问可能为undefined的属性。同时添加参数缺失时的错误处理:

修改Lambda函数中获取skuId的代码:

// 安全获取skuid,处理queryStringParameters不存在的情况
const skuId = event?.queryStringParameters?.skuid;

// 检查参数是否存在
if (!skuId) {
    return {
        statusCode: 400,
        body: JSON.stringify({ message: '缺少必填参数skuid' }),
    };
}

2. 完整修复后的Lambda代码

import { DynamoDBClient, ScanCommand } from '@aws-sdk/client-dynamodb';
import { unmarshall } from '@aws-sdk/util-dynamodb';

const dbclient = new DynamoDBClient({
    region: 'us-west-2', // 替换为你的AWS区域
});

export const handler = async (event) => {
    // 安全获取查询参数
    const skuId = event?.queryStringParameters?.skuid;

    // 参数校验
    if (!skuId) {
        return {
            statusCode: 400,
            body: JSON.stringify({ message: '缺少必填参数skuid' }),
        };
    }

    try {
        const scanParams = {
            TableName: 'products',
        };

        const scanResponse = await dbclient.send(new ScanCommand(scanParams));
        const items = scanResponse.Items || [];

        const foundItem = items.find(item => {
            return (
                item.variants &&
                item.variants.L &&
                item.variants.L.some(variant => variant.M.sku.S === skuId)
            );
        });

        if (!foundItem) {
            return {
                statusCode: 404,
                body: JSON.stringify({ message: '未找到对应商品' }),
            };
        }

        return {
            statusCode: 200,
            body: JSON.stringify(unmarshall(foundItem)),
        };
    } catch (err) {
        return {
            statusCode: 500,
            body: JSON.stringify({ message: err.message }),
        };
    }
};

3. 验证API Gateway集成配置

如果修改代码后仍有问题,检查API Gateway的集成类型:

  • 若使用LAMBDA_PROXY集成(推荐):API Gateway会自动将请求参数(包括queryStringParameters)封装到event对象中,无需额外配置。
  • 若使用自定义集成:需要在集成请求中配置映射模板,将查询参数映射到Lambda的输入参数。例如,对于REST API,映射模板(Content-Type为application/json)可设置为:
{
    "queryStringParameters": "$input.params()"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:15:37