Loading lesson path
Concept visual
Start at both ends
The DNS (Domain Name System) module provides functionality for name resolution in Node.js.
: Traditional Node.js style with callback functions
Formula
: Modern async/await support via dns.promisesFormula
Resolving domain names to IP addresses (A/AAAA records)Performing reverse DNS lookups (PTR records) Querying various DNS record types (MX, TXT, SRV, etc.)
The DNS module can operate in two distinct modes - using the operating system's facilities or performing direct network DNS queries. This affects how hostname resolution works in your application.
Here's a quick example of using the DNS module to look up a domain's IP address:
Basic DNS Lookup const dns = require('dns');
// Look up a domain name dns.lookup('example.com', (err, address, family) => {
if (err) {
console.error('Lookup error:', err);
return;
}
console.log(`IP address: ${address}`);
console.log(`IP version: IPv${family}`);
});Formula
To use the DNS module, you can import it in your Node.js application using either the callback or promise - based API:// Import the DNS module const dns = require('dns');
// Example usage dns.lookup('example.com', (err, address, family) => {
if (err) throw err;
console.log(`Resolved: ${address} (IPv${family})`);
});Formula
Promise - based API (Node.js 10.0.0 +)// Import the promises API
const { promises: dns } = require('dns');// Or:
const dns = require('dns').promises;
// Example with async/await async function lookupDomain(domain) {
try {
const address = await dns.lookup(domain);
console.log(`Resolved: ${address.address} (IPv${address.family})`);
} catch (err) {
console.error('Lookup failed:', err);
}
}
lookupDomain('example.com');The promise-based API is generally preferred for new code as it works better with modern async/await patterns and provides better error handling.
The DNS module provides several methods for looking up domain names and IP addresses. The most common operations are: dns.lookup()
Formula
: Uses the operating system's facilities to resolve hostnames dns.resolve*(): Performs DNS queries directly to name servers dns.reverse() : Performs reverse DNS lookups (IP to hostname)
Resolving Domain Names to IP Addresses const dns = require('dns');Formula
// Callback - based APIdns.lookup('www.example.com', (err, address, family) => {
if (err) throw err;
console.log('IP address: %s', address);
console.log('IP version: IPv%s', family);
});
const dns = require('dns').promises;Formula
// Promise - based APIasync function lookupExample() {
try {
const result = await dns.lookup('www.example.com');
console.log('IP address:', result.address);
console.log('IP version: IPv' + result.family);
} catch (err) {
console.error('Lookup failed:', err);
}
}
lookupExample();The dns.lookup() method uses the operating system's facilities for name resolution and does not necessarily perform any network communication.
Looking Up All IP Addresses for a Domain const dns = require('dns');
// Get all IPv4 addresses dns.resolve4('www.google.com', (err, addresses) => {
if (err) throw err;
console.log('IPv4 addresses:');
addresses.forEach(address => {
console.log(` ${address}`);
});// Perform a reverse lookup on the first IP
dns.reverse(addresses[0], (err, hostnames) => {
if (err) throw err;
console.log(`Reverse lookup for ${addresses[0]}:`);
hostnames.forEach(hostname => {
console.log(` ${hostname}`);
});
});
});The DNS module supports lookups for various DNS record types:
A
MX