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

Amazon Location调用searchPlaceIndexForSuggestions报非函数错误

问题根因

Uncaught TypeError: location.searchPlaceIndexForSuggestions is not a function这个报错和IAM权限配置没有关系。如果是权限缺失,接口请求会返回403类的权限错误,不会直接抛出方法不存在的异常。
核心原因是项目中引入的AWS SDK for JavaScript版本过旧:searchPlaceIndexForSuggestions是Amazon Location Service后续迭代新增的接口,旧版本SDK的Location服务客户端没有挂载这个方法。你目前可以正常调用的searchPlaceIndexForText、searchPlaceIndexForPosition属于服务上线初期就开放的基础接口,在旧版本SDK中已经存在,所以调用不受影响。

排查步骤
  • 先确认当前项目依赖的AWS SDK版本:
    从你写的new AWS.Location()实例化代码来看,你用的是AWS SDK v2,在项目根目录执行以下命令查看当前安装的SDK版本:
    npm list aws-sdk
    
    注意:searchPlaceIndexForSuggestions接口在AWS SDK v2中从2.996.0版本才正式加入Location客户端,所有低于这个版本的SDK都不存在这个方法。
  • 版本确认后,可以直接在浏览器控制台打印你实例化的location对象,查看原型链上的方法列表,就能直接确认是否存在searchPlaceIndexForSuggestions字段,快速验证是不是版本问题。
  • 如果你后续迁移到了AWS SDK v3,需要检查@aws-sdk/client-location包的版本,该接口在v3中从3.18.0版本开始支持。
解决方案
  1. 升级SDK版本
    继续使用SDK v2的话,直接把aws-sdk升级到最新稳定版即可:
    npm install aws-sdk@latest
    
    升级完成后重新构建项目,清除浏览器缓存后重新加载页面,就能正常识别该方法。
  2. 调用参数注意事项
    升级后调用该接口时注意必填参数和另外两个搜索接口有差异,必须传入你提前创建的Place Index资源名IndexName,以及用户输入的地址前缀Text,基础调用示例:
    const response = await location.searchPlaceIndexForSuggestions({
      IndexName: '你自己创建的地点索引名称',
      Text: '用户输入的地址文本前缀',
      MaxResults: 5 // 可选参数,控制返回的自动补全建议条数
    }).promise();
    
  3. 权限配置说明
    你当前IAM策略里配置的geo:SearchPlaceIndex*已经覆盖了该接口需要的geo:SearchPlaceIndexForSuggestions权限,不需要额外调整策略配置,升级SDK后可以直接复用现有权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:48:16