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

使用Express+MongoDB开发Node.js API调用Google Places AutoComplete遇400错误

排查Google Places AutoComplete API 400错误的解决方案

一、核心代码错误修复

1. 响应数据映射错误

在Map Service的返回处理逻辑中,存在明显的字段映射错误:你试图遍历response.data.suggestions,但Google Places API v1返回的地点列表实际是response.data.places。这会导致即使请求成功,也无法正确解析数据,甚至可能掩盖真实的请求错误。修改代码如下:

if (response.data && response.data.places) {
    return {
        success: true,
        suggestions: response.data.places.map(place => ({
            name: place.displayName.text,
            placeId: place.id
        }))
    };
}

2. 缺失axios依赖导入

你的Map Service代码中未导入axios模块,这会直接导致请求执行失败。需要在文件顶部添加:

const axios = require('axios');

二、Google Places API配置检查

1. 验证API密钥有效性

  • 确认process.env.GOOGLE_MAPS_API中的密钥无拼写错误、无多余空格或特殊字符。
  • 登录Google Cloud控制台,检查该密钥是否已启用Places API(v1),旧版的Places Web Service无法兼容当前请求格式。
  • 检查密钥的访问限制:如果设置了IP白名单或HTTP referrer限制,确保你的服务器IP或请求来源在允许范围内。

2. 请求参数与头部验证

  • 确认X-Goog-FieldMask头部的字段格式正确,当前使用的places.displayName,places.id符合v1版本要求,若需扩展字段需同步调整该值。
  • 检查请求体参数:regionCode需符合ISO 3166-1 alpha-2标准(如"US"合法),languageCode需符合BCP 47标准(如"en"合法),格式错误会直接触发400响应。

三、错误日志优化

当前catch块仅返回error.message,无法获取Google API返回的具体错误详情,不利于排查问题。修改catch块,打印并返回完整错误信息:

catch (error) {
    console.error("Google API Error Details:", error.response?.data || error.message);
    return {
        success: false,
        error: error.response?.data?.error?.message || error.message
    };
}

通过该修改,你可以直接看到Google返回的400错误具体原因,比如密钥无效、API未启用、参数格式错误等。

四、请求链路验证

  • 确认mapsRoutes中已正确配置POST路由,指向getAutoCompleteSuggestionsController。
  • Postman请求中,确保Content-Type请求头为application/json,请求体格式与你提供的{"input": "Athreya Hospital"}一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:46:08