The node:dns module provides functions for resolving domain names into IP addresses, performing reverse DNS lookups, and querying specific DNS records (A, AAAA, MX, TXT, CNAME, NS) directly over the network.
flowchart LR
A["Node.js Application"] -->|"dns.promises.resolveMx('google.com')"| B["DNS Resolver Engine"]
B -->|"Network Query"| C["Authoritative Name Server"]
C -->|"Return MX Records"| A
import dns from 'node:dns/promises';
async function performDnsDiagnostics(domainName) {
console.log(`--- Running DNS Diagnostics for [${domainName}] ---`);
try {
// 1. Resolve IPv4 Address (A Record)
const ipAddresses = await dns.resolve4(domainName);
console.log('IPv4 Addresses (A Records):', ipAddresses);
// 2. Resolve Mail Exchange Records (MX Records)
const mxRecords = await dns.resolveMx(domainName);
console.log('Mail Servers (MX Records):', mxRecords);
// 3. Resolve TXT Records (SPF / Domain Verification)
const txtRecords = await dns.resolveTxt(domainName);
console.log('TXT Records:', txtRecords);
// 4. Reverse Lookup IP Address
if (ipAddresses.length > 0) {
const hostnames = await dns.reverse(ipAddresses[0]);
console.log(`Reverse Lookup (${ipAddresses[0]}):`, hostnames);
}
} catch (error) {
console.error('DNS Query Error:', error.message);
}
}
performDnsDiagnostics('nodejs.org');
dns.lookup vs dns.resolve: dns.lookup() uses underlying OS getaddrinfo (synchronous threadpool blocking); dns.resolve() makes direct network DNS queries asynchronously.node:dns/promises for async/await readability.Which DNS function should you use to check the MX records of a domain before sending an email?
Sign in to track your learning journey, earn industry-recognized certificates, and join our elite developer community.
Quick Access With