1.制作入口模块(index.js)
//加载原生模块
var http = require('http'),
url = require('url');
//加载文件模块
var router = require('./router.js');
//创建Http服务器
http.createServer(function(req,res){
var pathname = url.parse(req.url).pathname; //pathname http请求路径
req.setEncoding("utf8"); //设置http返回字符串编码
res.writeHead(200,{'Content-Type':'text/html'});
router.router(res,req,pathname); //调用router对象的方法
}).listen(3000,"127.0.0.1"); //监听本地接口3000
2.路由处理模块(router.js)
//加载文件模块
var ParseDns = require('./parse_dns.js'),
MainIndex = require('./main_index.js');
//将router方法暴露给外部调用对象
exports.router = function(res,req,pathname){
switch(pathname){ //根据pathname来路由调用处理逻辑
case"/parse":
ParseDns.parseDns(res,req)//执行DNS解析
break;
default:
MainIndex.goIndex(res,req)//响应HTML客户端
}
}
3.DNS解析模块(parse_dns.js)
//加载文件模块
var querystring = require("querystring"),
dns = require('dns');
//
exports.parseDns = function(res,req){
var postData = ""; //postDate为客户端提交的表单数据
req.addListener("data",function(postDataChunk){
postData += postDataChunk;
});
//HTTP响应http页面信息
req.addListener("end",function(){
var retData = getDns(postData,function(domain,addresses){
res.writeHead(200,{'Content-Type':'text/html'});
//结束返回html页面
res.end("<html><head><meta http-equiv='content-type' content='text/html;charset=utf8'></head><div style='text-align:center'>Domain:<span style='color:red'>" + domain + "</span>IP:<span style='color:red'>"+addresses.join(',') + "</span></div></html>");
});
return;
});
function getDns(postData,callback){
var domain = querystring.parse(postData).search_dns;
//异步解析域名
dns.resolve(domain,function(err,addresses){
if(!addresses){
addresses=['不存在域名']
}
callback(domain,addresses);
});
}
}
4.首页展示模块(main_index.js)
//加载原生模块
var fs = require('fs'),
url = require('url');
//暴露方法
exports.goIndex = function(res,req){
var readPath = __dirname + '/' + url.parse('index.html').pathname;
var indexPage = fs.readFileSync(readPath); //同步读取index.html页面数据
res.end(indexPage); //响应返回一个index.html页面到客户端
5.html页面(index.html)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>DNS查询</title>
</head>
<body>
<h1 style="text-align: center">DNS查询工具</h1>
<div style="text-align: center">
<form action="/parse" method="post">
查询DNS:<input type="text" name='search_dns' />
<input type='submit' value="查询"/>
</form>
</div>
</body>
</html>