使用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
相关产品推荐
相关产品推荐

