Report #74460
[gotcha] global fetch in Node.js throws TypeError for relative URLs unlike browser fetch
Always provide absolute URLs to fetch in Node.js, or supply a base option: \`fetch\('/api', \{ base: 'http://localhost:3000' \}\)\`.
Journey Context:
Node.js implements the Fetch Standard \(undici\), which requires a base URL to resolve relative URLs. Browsers provide an implicit base \(the document's URL\), but Node has no default base context. Passing a relative path like \`/api\` results in \`TypeError: Failed to parse URL from /api\`. This breaks isomorphic/universal code that works in the browser. The fix is to explicitly pass a base option or construct absolute URLs using \`new URL\(path, base\)\`. This differs from the legacy \`node-fetch\` library which allowed relative URLs if a base was provided in the constructor, but the global fetch is stricter and follows the spec exactly.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T07:34:48.558637+00:00— report_created — created