Node.js学习(3) 按模块实现业务

来源:互联网 发布:上古卷轴rm捏脸数据 编辑:程序博客网 时间:2024/06/10 10:24

学习实现一个简单的DNS解析网站
(1) 首先要创建服务器,由入口模块完成;
(2) 然后应该有一个业务逻辑控制,通过路由模块实现;
(3) 服务器收到用户输入的域名后,交给业务处理模块处理,即DSN解析模块;
(4) 给用户显示信息的功能交给首页展示模块。

1.入口模块(index.js)
/*
自定义入口模块 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; //获取当前请求资源的url路径
req.setEncoding(“utf8”); //设置返回客户端页面的数据格式
res.writeHead(200, { ‘Content-Type’:’text/html’ });
router.router(res, req, pathname); //调用router方法处理url路由
}).listen(3000, “127.0.0.1”);

//打印运行log
console.log(‘Server is running at localhost’);

2.路由处理模块(route.js)
/*
自定义路由模块 router.js
*/

//加载自定义DNS解析模块和首页展示模块
var ParseDns = require(‘./parse_dns.js’),
MainIndex = require(‘./main_index.js’);

//创建router方法,并将该方法提供给外部调用
exports.router = function(res, req, pathname){
switch(pathname){
case “/parse”:
ParseDns.parseDns(res, req); //执行DNS解析
break;
default:
MainIndex.goIndex(res, req); //响应HTML到客户端
}
}

3.DNS解析模块(parse_dns.js)
/*
自定义DNS解析模块 parse_dns.js
*/

// 加载两个公共模块
var querystring = require(‘querystring’),
dns = require(‘dns’);

//创建parseDns方法,并将该方法提供给外部调用
exports.parseDns = function(res, req){
var postData = “”;
req.addListener(“data”, function(postDataChunk){
postData += postDataChunk;
});

//HTTP相应HTML信息
req.addListener(“end”, function(){
var retData = getDns(postData, function(domain, addresses){
res.writeHead(200, { ‘Content-Type’:’text/html’ });
res.end(“

Domain:
+ domain + “

IP:” + addresses.join(‘,’) + “
“);
});
return;
});
}

//模块私有方法
function getDns(postData, callback){
var domain = querystring.parse(postData).search_dns;
//异步解析域名
dns.resolve(domain, function(err, addresses){
if(!addresses){
addresses = [‘不存在域名’];
}
//在异步函数 getDns 执行结束后,执行 callback 函数,将执行结果 domain 和 addresses 返回到回调函数中处理.
callback(domain, addresses);
});
}

4.首页展示模块(main_index.js)
/*
自定义首页展示模块 main_index.js
处理首页逻辑信息.
*/

// 加载两个公共模块
var fs = require(‘fs’),
url = require(‘url’);

//定义goIndex跳转首页函数,供外部调用
exports.goIndex = function(res, req){
var readPath = __dirname + ‘/’ + url.parse(‘index.html’).pathname;
var indexPage = fs.readFileSync(readPath);
res.end(indexPage);
}

运行 index.js,可以实现DNS解析的功能。

原创粉丝点击