Discover how a tiny URL mistake can break your whole app--and how Node.js saves you from it!
Relative vs absolute URL resolution in Node.js - When to Use Which
Start learning this pattern below
Jump into concepts and practice - no test required
Imagine you have a website with many pages and links. You try to write every link manually, mixing full web addresses and short paths like "about" or "../contact".
Manually managing URLs is confusing and error-prone. You might link to wrong pages, break navigation, or cause endless loops because you don't know how paths combine or resolve.
Node.js URL resolution automatically figures out how to combine relative paths with base URLs to create correct absolute URLs, so your links always work as expected.
const url = base + '/' + relativePath;const url = new URL(relativePath, base).href;
This lets you build dynamic, reliable links and resources without worrying about path mistakes or broken navigation.
When loading images or API endpoints dynamically in a Node.js app, resolving relative URLs ensures your app fetches the right data no matter where it runs.
Manual URL building is tricky and easy to break.
Node.js URL resolution handles path combining safely.
This makes your app's links and resources reliable and maintainable.
Practice
Solution
Step 1: Understand relative URL meaning
A relative URL does not include the full path and depends on a base URL to form a complete address.Step 2: Compare options
A URL that depends on a base URL to form a full address. correctly describes this. Options B and C describe absolute URLs. A URL that cannot be resolved using the URL class. is incorrect because Node.js URL class can resolve relative URLs with a base.Final Answer:
A URL that depends on a base URL to form a full address. -> Option BQuick Check:
Relative URL = depends on base URL [OK]
- Confusing relative URLs with absolute URLs
- Thinking relative URLs include protocol
- Believing relative URLs cannot be resolved
Solution
Step 1: Understand URL constructor usage
The URL constructor takes two arguments: the path and the base URL. For relative paths, the first argument is the relative path, and the second is the base.Step 2: Check each option
new URL('/images/photo.jpg', 'https://example.com/gallery/') correctly uses new URL(relativePath, baseURL). new URL('https://example.com/gallery/' + '/images/photo.jpg') concatenates strings but does not use the URL constructor properly. new URL('images/photo.jpg') misses the base URL. new URL('https://example.com/gallery/images/photo.jpg') uses an absolute URL, not relative.Final Answer:
new URL('/images/photo.jpg', 'https://example.com/gallery/') -> Option AQuick Check:
URL(relative, base) = correct syntax [OK]
- Concatenating strings instead of using URL constructor
- Omitting the base URL for relative paths
- Passing absolute URL as first argument when base is given
const { URL } = require('url');
const base = 'https://example.com/folder/';
const relative = '../image.png';
const fullUrl = new URL(relative, base);
console.log(fullUrl.href);Solution
Step 1: Understand relative path resolution
The relative path '../image.png' means go one folder up from 'https://example.com/folder/' which leads to 'https://example.com/'.Step 2: Resolve the full URL
Combining base and relative path, the URL class normalizes the path to 'https://example.com/image.png'. https://example.com/image.png matches this.Final Answer:
https://example.com/image.png -> Option CQuick Check:
Relative '..' moves up one directory [OK]
- Not normalizing '..' in URL paths
- Expecting '../' to stay in the URL string
- Confusing relative and absolute URL outputs
const { URL } = require('url');
const base = 'https://example.com/path';
const relative = 'file.txt';
const url = new URL(relative, base);
console.log(url.href);Solution
Step 1: Check base URL format
The base URL 'https://example.com/path' lacks a trailing slash, so it is treated as a file, not a folder.Step 2: Understand URL resolution effect
Appending 'file.txt' to a base treated as file replaces 'path' with 'file.txt', resulting in 'https://example.com/file.txt', not 'https://example.com/path/file.txt'.Final Answer:
Base URL is missing trailing slash, causing incorrect resolution. -> Option AQuick Check:
Base URL trailing slash affects relative URL resolution [OK]
- Omitting trailing slash on base URL
- Thinking relative URLs must start with '/'
- Passing wrong number of arguments to URL constructor
Solution
Step 1: Analyze relative path '../../images/pic.jpg'
The '../../' means go up two folders from 'https://example.com/api/v1/'.Step 2: Move up two levels from base URL
Starting at 'https://example.com/api/v1/', going up one level is 'https://example.com/api/', and up another is 'https://example.com/'. Then append 'images/pic.jpg'.Final Answer:
https://example.com/images/pic.jpg -> Option DQuick Check:
Two '..' moves up two directories [OK]
- Not moving up enough folders for multiple '..'
- Appending relative path without normalization
- Confusing base URL folder levels
