Node.js DNS Caching
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information. add readme Mar 24, 2013
cache.js initial commit Mar 24, 2013
lookup.js initial commit Mar 24, 2013
memory.js initial commit Mar 24, 2013
package.json update binaryheap version Mar 25, 2013


If you perform a query on an A or AAAA type and it doesn't exist, the cache will attempt to lookup a CNAME and then resolve that.

The constructor takes an optional object with the following properties:

  • store -- implements the cache store model (optional, default MemoryStore)


  • lookup(question, cb) -- for a given question check the cache store for existence
  • store(packet) -- iterates over the resource records in a packet and sends them to the cache store
  • purge() -- clears the cache store of all entries

MemoryStore / Cache store model

MemoryStore(opts) -- An in memory store based on a js object


  • get(domain, key, cb)
  • domain is the holder under which keys will be applied, key is the subdomain that is being queried for. If you get('', 'www', cb) you are really asking for
  • cb(err, results) -- results is an object of types and array of answers
  • { 1: [{address: '', ttl: 300, type: 1, class: 1}] }
  • set(domain, key, data, cb)
  • domain is the parent under which this key is stored. key is the subdomain we are storing, data is an object of types with an array of answers.
  • set('', 'www', {1: [{class:1, type:1, ttl:300, address:''}]}, cb)
  • cb(err, data) -- cb merely returns the data that was passed.
  • delete(domain[, key[, type]], cb) -- delete all from a domain, a domain and key, or a domain a key and a type.


Is a mechanism that given a store performs the common resolution pattern.

Given previous added to a store:

  • * A

A Lookup(store, '', {name:'', type:1}, cb) will resolve www to the CNAME and then search for which will return no results, and then search for * which will also return no results, and ultimately searches for * which will return the desired record.

Callback will be called with (err, results) where results is an array suitable for use in Packet.answer