← 中文资源

简体中文版本

Node.js ERR_INVALID_URL — TypeError Invalid URL

修复 Node.js 的 TypeError [ERR_INVALID_URL]:fetch 或 WHATWG URL 构造函数拒绝相对、格式错误或缺少协议的 URL。

阅读英文原文

症状

调用 fetch('/api/users') 或 new URL(host) 时抛出 TypeError [ERR_INVALID_URL]。这些值看似合法,直到你检查其字节构成才发现问题。在浏览器里同样的相对字符串能工作,因为页面提供了 base,这正是该错误在服务端令人意外的原因。

诊断

用转义方式打印原始值,让空白字符无所遁形:

console.log(JSON.stringify(input));

再测试提供 base 后是否能解析:

new URL('/api/users', 'https://api.example.com'); // works
new URL('/api/users'); // throws

修复

始终基于 base 构造 URL,并对动态片段做编码:

const base = process.env.API_BASE || 'https://api.example.com';
const url = new URL(`/users/${encodeURIComponent(id)}`, base);
await fetch(url);

在启动时校验 API_BASE,使其缺失协议时尽早失败。

验证

在每次请求前打印解析后的 url.href,确认请求能到达服务端,且不再出现无效 URL 错误。