所有创建的文件都要在一个文件夹下。
代码如下:
index.html:
mainIndex.js:
var fs=require('fs');
var url=require('url');
exports.goIndex=function(res) {
var readPath='./'+url.parse('index.html').pathname;
var indexpage=fs.readFileSync(readPath);
res.end(indexpage);
}
parse_dns_ex.js:
var http=require('http');
var url=require('url');
var router=require('./router.js');
//res是response,req是request,res是处理HTTP的响应事件,req处理HTTP的请求事件。
//req中包含了用户请求的http头以及请求的一些参数,根据req中的方法和属性,可以获取客户端传递的参数。
//res为相应客户端请求对象,该对象包含了一些http响应属性额方法,通过该对象响应数据到客户端。
http.createServer(function(req,res){
//这里分为两个页面,一个是最初查找的页面,第二个是显示结果的页面。所以这里的pathname有两个,分别为/和/parse.
var pathname=url.parse(req.url).pathname;
console.log('pathname:'+pathname);
req.setEncoding("utf8");
res.writeHead(200,{'Content-Type':'text/html'});
//根据pathname来决定显示什么页面。
router.router(res,req,pathname);
}).listen(3000,"127.0.0.1");
parse_dns.js:
var querystring=require('querystring');
var dns=require('dns');
//Node.js中 req对象有一个addListener方法来获取http的post的参数,这个接口是一个异步的方法,携带的两个事件分别是data和end。
//data是指当有数据传递到服务器时触发的事件,而end则表示客户端所有数据传递完毕后触发的事件。
//因此在服务器判断所有数据接受完毕后,执行回调函数来获取post的参数,得到post参数后才执行相应逻辑getDns。
exports.parseDns=function(res,req){
var postData="";
req.addListener("data",function(postDataChunk){
postData+=postDataChunk;
});
req.addListener("end",function () {
//在这里首先会调用getDns这个函数,在执行到getDns这个函数最后一行时,会调用传进去的回调函数。
//即下面长长的一段function。将刚刚得到的domain和相对应的addresses通过html来显示出来。
var retData=getDns(postData,function (domain,addresses) {
res.writeHead(200,{'Content-Type':'text/html'});
res.end("
});
return;
});
}
function getDns(postData,callback) {
//得到需要查找的内容。
var domain=querystring.parse(postData).search_dns;
//因为在html文件中,那个输入框的名字是search_dns.
dns.resolve(domain,function (err,addresses) {
//addresses为得到的各个域名。
if (!addresses) {
addresses=['不存在域名'];
}
callback(domain,addresses);
});
}
router.js:
var mainindex=require('./mainIndex.js');
var parse_dns=require('./parse_dns.js');
exports.router=function(res,req,pathname){
switch(pathname) {
//如果是解析的页面。
case "/parse":
parse_dns.parseDns(res,req);
break;
default:
//如果是查找的页面。
mainindex.goIndex(res);
break;
}
}
然后在命令行中运行node parse_dns_ex.js
然后打开浏览器,输入:http://127.0.0.1:3000
出现如下界面:
输入www.qq.com,点击查询,出现如下结果:
Domain: www.qq.com IP: 101.226.103.106,101.226.129.158
代码如下:
index.html:
mainIndex.js:
var fs=require('fs');
var url=require('url');
exports.goIndex=function(res) {
}
parse_dns_ex.js:
var http=require('http');
var url=require('url');
var router=require('./router.js');
//res是response,req是request,res是处理HTTP的响应事件,req处理HTTP的请求事件。
//req中包含了用户请求的http头以及请求的一些参数,根据req中的方法和属性,可以获取客户端传递的参数。
//res为相应客户端请求对象,该对象包含了一些http响应属性额方法,通过该对象响应数据到客户端。
http.createServer(function(req,res){
}).listen(3000,"127.0.0.1");
parse_dns.js:
var querystring=require('querystring');
var dns=require('dns');
//Node.js中 req对象有一个addListener方法来获取http的post的参数,这个接口是一个异步的方法,携带的两个事件分别是data和end。
//data是指当有数据传递到服务器时触发的事件,而end则表示客户端所有数据传递完毕后触发的事件。
//因此在服务器判断所有数据接受完毕后,执行回调函数来获取post的参数,得到post参数后才执行相应逻辑getDns。
exports.parseDns=function(res,req){
Domain:
"+domain+
"IP:
"+addresses.join(',')+"
");
}
function getDns(postData,callback) {
}
router.js:
var mainindex=require('./mainIndex.js');
var parse_dns=require('./parse_dns.js');
exports.router=function(res,req,pathname){
}
然后在命令行中运行node parse_dns_ex.js
然后打开浏览器,输入:http://127.0.0.1:3000
出现如下界面:
输入www.qq.com,点击查询,出现如下结果:
Domain: www.qq.com IP: 101.226.103.106,101.226.129.158