Matomo API调用出现ERR_CONNECTION_TIMED_OUT错误求助
Matomo API 连接超时问题排查及代码错误分析
代码中的明显错误
- HTML实体误用:代码里用
&拼接参数,这是HTML转义字符,在JavaScript中需直接使用&,否则会导致API参数格式无效,服务器无法正确解析请求,进而引发无响应或超时。 - Fetch超时设置无效:原生
fetch不支持timeout配置项,你设置的{timeout: 60000}不会生效,需用AbortController实现超时控制。 - 数据解析缺失:代码直接使用未定义的
data变量,且未将response转为JSON格式,无法正确获取返回数据。 - 参数未编码:
companyName作为segment参数未做URL编码,若包含特殊字符会破坏请求结构,导致异常。
修正后的代码示例
var apiUrl = 'https://dummy.matomo.de/'; var auth_token = 'dummyAuthToken12345'; var siteId = '5'; var exitPage = '&method=Actions.getExitPageUrls'; // 对segment参数做URL编码 var encodedSegment = encodeURIComponent(companyName); // 用AbortController实现超时控制 const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 60000); fetch(`${apiUrl}?module=API${exitPage}&idSite=${siteId}&segment=${encodedSegment}&token_auth=${auth_token}&format=json`, { signal: controller.signal }) .then(response => { if (!response.ok) { throw new Error(`HTTP错误!状态码: ${response.status}`); } return response.json(); }) .then(data => { var totalVisits = data[0]?.['nb_visits']; console.log(totalVisits); }) .catch(error => { if (error.name === 'AbortError') { console.log('请求超时'); } else { console.error('请求失败:', error); } }) .finally(() => { clearTimeout(timeoutId); });
额外排查方向
- 直接在浏览器地址栏拼接完整的API请求URL,测试是否能正常返回JSON数据。如果浏览器也无法访问,说明Matomo服务端存在问题(如宕机、域名解析失败、CDN故障等)。
- 检查Matomo服务器的CORS配置,确保允许你的前端域名发起跨域请求,CORS配置错误可能导致请求被阻塞,表现为超时。
- 验证Auth Token的权限,确认该token有权限访问目标站点的API数据,权限不足可能导致服务器无响应。
内容的提问来源于stack exchange,提问作者Nyghtqore
相关产品推荐
相关产品推荐

