使用undici构建REST API时遇TypeError: fetch failed错误的排查
解决Undici中TypeError: fetch failed的问题
结合你给出的配置信息和场景,下面是几个针对性的排查方向和解决方法:
检查MockAgent的拦截规则是否匹配请求
你测试用的MockAgent必须精准匹配实际请求的URL和方法。从你的配置看,最终请求的是https://test.ca/的GET请求,要确保MockAgent的拦截规则完全对应:const { MockAgent } = require('undici'); const agent = new MockAgent(); // 绑定对应域名的mock池 const mockPool = agent.get('https://test.ca'); // 拦截根路径的GET请求 mockPool.intercept({ path: '/', method: 'GET' }).reply(200, { data: 'test' });要是拦截规则里的path、method或者域名和实际请求不匹配,MockAgent就无法拦截请求,进而触发
fetch failed错误。排查OAuth认证逻辑的干扰
你的请求封装包含OAuth认证,检查这部分代码是否修改了请求配置:- 有没有误覆盖
prefixUrl或path参数,导致最终请求的URL错误 - 认证头是否正确生成,比如
Authorization头的格式是不是Bearer <token>,有没有漏掉token内容
可以在请求发送前打印完整的请求参数,确认url、headers等信息是否符合预期。
- 有没有误覆盖
验证Undici版本的API兼容性
不同版本的Undici对MockAgent的API要求可能不同,比如部分新版本中MockAgent.get()只接受纯域名(不能带路径),如果你的写法不符合当前版本要求,也会导致请求失败。可以核对你使用的Undici版本对应的官方文档,确认MockAgent的用法是否正确。非测试环境:检查目标地址的可达性
如果是生产或开发环境出现这个错误,先用curl测试目标地址:curl -v https://test.ca/查看是否存在网络不通、SSL证书无效、服务器返回错误码等情况,这些都会导致Undici抛出
fetch failed错误。
内容的提问来源于stack exchange,提问作者Vatsal
相关产品推荐
相关产品推荐

