传递URL对象作为Fetch参数时,响应无法转换为JSON的问题
问题原因与解决方案
核心问题
从你提供的响应日志里能看到status: 404,这说明你请求的https://some-base-domain.com/traffic资源不存在,服务器返回了404错误。而body: { stream: undefined }是因为404响应的内容要么不是有效JSON格式,要么响应体已经被内部处理过,导致无法正常解析为可读流。
虽然Fetch确实支持传入URL对象,但你的URL构造逻辑没问题,问题根源在目标接口不存在。
解决方法
确认接口有效性
直接在浏览器或调试工具里访问https://some-base-domain.com/traffic,确认这个接口是否存在、是否能返回合法的JSON内容。完善错误处理逻辑
在代码里先判断响应状态,避免直接调用res.json()导致报错:
const url = new URL( '/traffic', 'https://some-base-domain.com' ) const [err, res] = await to(fetch(url)) if (err) { console.error(err) return } // 先检查响应状态是否处于正常范围(2xx) if (!res.ok) { console.error(`请求失败,状态码:${res.status}`); // 读取错误响应的文本内容,排查服务器返回的具体错误信息 const errorContent = await res.text(); console.error('服务器返回错误:', errorContent); return; } const data = await res.json() return data
- 验证URL正确性
可以先打印url.toString(),确认最终拼接出的请求地址是否和预期一致,避免路径拼接时出现意外错误。
内容的提问来源于stack exchange,提问作者George Katsanos
相关产品推荐
相关产品推荐

