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

Node.js中传ApiId/ApiName给自定义函数返回undefined如何解决?

问题根因

你的报错和name参数的封装无关,是两个代码逻辑错误导致的:

  1. dimensionValue函数没有做匹配失败的防御处理:Array.prototype.find在未找到匹配项时会返回undefined,你直接访问.value属性自然会触发Cannot read property 'value' of undefined报错。
  2. 分支判断逻辑完全错误:else if分支中你使用了未初始化的变量sns_DimensionsValue和find返回的维度对象做相等判断,该条件永远不成立,会触发错误分支调用dimensionValue查询不存在的维度名,最终触发报错。
    你单独执行语句可以正常返回,是因为你测试时用的ApiId是当前环境确实存在的维度,find可以正常匹配到结果。

修复方案

1. 改造dimensionValue函数增加判空逻辑

function dimensionValue(name) {
    console.log("Testing")
    const targetDimension = sns.Trigger.Dimensions.find(dimension => dimension.name === name)
    // 匹配不到时返回空字符串作为默认值,也可根据你的业务需要调整默认值
    return targetDimension ? targetDimension.value : ''
}

2. 修正分支判断逻辑

if (sns.Trigger.Namespace == "AWS/ApiGateway") {
    console.log("Testing2")
    // 提前提取所有维度的存在状态,避免重复执行find
    const hasApiId = sns.Trigger.Dimensions.find(dimension => dimension.name === 'ApiId')
    const hasApiName = sns.Trigger.Dimensions.find(dimension => dimension.name === 'ApiName')
    const hasStage = sns.Trigger.Dimensions.find(dimension => dimension.name === 'Stage')
    let sns_DimensionsValue = ''

    if (hasApiId && hasStage) {
        console.log('ApiId and Stage')
        sns_DimensionsValue = dimensionValue('ApiId') + '_' + dimensionValue('Stage')
    } else if (hasApiName && hasStage) {
        console.log('ApiName and Stage')
        sns_DimensionsValue = dimensionValue('ApiName') + '_' + dimensionValue('Stage') 
    } else if (hasApiId) {
        console.log('ApiId')
        sns_DimensionsValue = dimensionValue('ApiId')    
    } else if (hasApiName) {
        console.log('ApiName')
        sns_DimensionsValue = dimensionValue('ApiName')    
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:15:03