使用Axios调用Google Maps API遇ECONNREFUSED错误求助
问题分析与解决
核心原因
这个错误既不是Axios本身的问题,也不是URL的逻辑结构问题,是URL中的HTML实体转义错误导致请求被错误路由到本地。
错误信息里的connect ECONNREFUSED ::1:80明确显示请求发向了本地IPv6地址的80端口,而非Google Maps API服务器,说明你的URL被解析成了无效地址,触发了本地路由。
问题点定位
看你代码里的URL模板:
url: `https://maps.googleapis.com/maps/api/place/details/json?place_id=${place['place_id']}&fields=name%2Cplace_id%2Crating%2Cuser_ratings_total%2Cprice_level%2Cformatted_phone_number%2Cwebsite%2Copening_hours%2Cphotos%2Creviews&key=${googleAPIKey}`
其中的&是HTML环境下&的转义字符,但在JavaScript模板字符串中直接使用会被当成URL的一部分,导致参数分隔符失效。比如&fields会被服务器识别为一个参数名而非新参数的分隔符,整个URL格式完全不符合Google API的要求,进而被你的本地环境(或代理)错误导向localhost。
修复方案
- 把所有
&替换成&,这是URL标准的参数分隔符。 - 可选优化:fields参数里的
%2C可以直接换成逗号,,Google Maps API支持用逗号分隔字段,可读性更强。
修正后的代码:
configs = { method: 'get', url: `https://maps.googleapis.com/maps/api/place/details/json?place_id=${place['place_id']}&fields=name,place_id,rating,user_ratings_total,price_level,formatted_phone_number,website,opening_hours,photos,reviews&key=${googleAPIKey}`, headers: {} }; axios(configs) .then(result => console.log(result)) .catch(err => console.log(err));
验证步骤
- 修复后先打印
console.log(configs.url),复制生成的URL到浏览器中直接访问,确认能返回正常的API响应。 - 若仍有问题,检查是否存在全局代理配置(比如Axios默认baseURL、系统环境代理),但结合你其他Axios请求正常的情况,大概率是URL转义问题导致的。
内容的提问来源于stack exchange,提问作者Banned User
相关产品推荐
相关产品推荐

