dnsagent
Version:
87 lines (60 loc) • 3.83 kB
Markdown
__DNS agent__
* [Get Started](
* [API](
* [Why dns-agent](
* [Honorable Dependents](
* [About](
* [CHANGE LOG](./CHANGELOG.md)
* [Homepage](https://github.com/YounGoat/dns-agent)
```javascript
// The main entrance of package *dns-agent* is a class.
const DnsAgent = require('dns-agent');
// Create an instance.
const agent = new DnsAgent({
// Time-To-Live of resolved address (in seconds).
ttl: 86400,
// Method to execute name resolving.
// . "system" means to use dns.lookup / getaddrinfo(3).
// . "network" means to perform a DNS query on the network.
// . <IP> DNS server to be used.
// The default value is "system".
source: 'system'
});
agent.lookup4('localhost', (err, ipv4) => {
// ...
});
```
The main entrance of __dns-agent__ is a class (named `DnsAgent` in following code snippets).
* class __DnsAgent__(object *options*)
The only argument may be passed to the constructor is an option object.
```javascript
const DnsAgent = require('dns-agent');
const agent = new DnsAgent({ ttl, source });
```
- __ttl__ *number* DEFAULT `86400` (unit: seconds)
Time-To-Live of resolved address.
- __source__ *string* DEFAULT `"system"`
Acceptable values may be `"system"` | `"network"` | `"<IP_address>"`.
When __source__ has a value of `"system"`, __dns-agent__ will use `dns.lookup()` to find the responding IP address of hostname. It is actually, according to [Node.js Documentation, DNS](https://nodejs.org/dist/latest-v8.x/docs/api/dns.html#dns_implementation_considerations), implemented as a synchronous call to [getaddrinfo(3)](http://man7.org/linux/man-pages/man3/getaddrinfo.3.html).
When the value is `"network"`, `dns.resolve()` will be used. That means to *always perform a DNS query on the network*. However, if there is some name resolving result not expired, whether or not it is stored in current instance of __dns-agent__, it will be returned whitout querying the DNS server.
Else if `"<IP_address>"` set, __dns-agent__ behaves like what it does on `"network"` but using the specified DNS server.
* Promise | void __agent.lookup4__(string *hostname* [, Function __callback__ ])
Resolve the *hostname* into the first found A(IPV4) address. This is a [PoC](https://www.npmjs.com/package/jinang#poc) function that will return an instance of `Promise` if no `callback` passed, or return void and invoke the passed `callback`.
- __hostname__ *string*
- __callback__(Error *error*, String *ipv4*) *Function* OPTIONAL
## Examples
## Why *dns-agent*
On designing another package [__htp__](https://www.npmjs.com/package/htp), I think it maybe helpful for those developing with __htp__ to be informed how many time an HTTP/HTTPs request spends on each step including (host)name resolving. So, I will try `dns.lookup()` before really launching the request. It works as expected in unit test. However, when hundreds of, even thousands of requests happen in very short time, repeatedly invoking of `dns.lookup()` may lead to unexpected exception. Maybe it is regarded as something like [DoS attack](https://en.wikipedia.org/wiki/Denial-of-service_attack) by system or DNS server. So, I write __dns-agent__ and delegate the actions on dns to it.
## Honorable Dependents
Of course, [__htp__](https://www.npmjs.com/package/htp) is the first dependent.
## About
For convenience, this package has following names (alias):
* [dns-agent](https://www.npmjs.com/package/dns-agent)
* [dns.agent](https://www.npmjs.com/package/dns.agent)
* [dnsagent](https://www.npmjs.com/package/dnsagent)