Node.js学习(3) 按模块实现业务
2017-09-15 22:03
417 查看
学习实现一个简单的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解析的功能。
(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解析的功能。
相关文章推荐
- node.js学习笔记——学生信息管理的实现(把功能模块化)使用官方提供的http模块实现
- Node.js学习(9)----核心模块
- 从零开始学习Node.js例子四 多页面实现数学运算 续一(使用connect和express框架)
- node.js学习笔记(3)-node.js结合mysql数据库实现的web项目中常见功能--登录验证、session传值、拦截器、ajax传值等
- node.js学习教程之三:模块
- nodeJs学习笔记-Node的模块实现
- 客户端网络pomelo学习笔记 (3) node.js 与 c 客户端 Diffie-Hellman 密钥交换算法的实现客户端网络
- 用C/C++来实现 Node.js 的模块(二)
- Node.js中的模块机制学习笔记
- Node.js学习笔记【1】入门(服务器JS、函数式编程、阻塞与非阻塞、回调、事件、内部和外部模块)
- Node.js中的模块机制学习笔记
- NODE.JS学习笔记——CRYPTO 加密模块
- 用C/C++来实现 Node.js 的模块(一)
- Node.js学习笔记2【核心模块】
- rtags——node.js+redis实现的标签管理模块
- Node.js学习笔记(3、http模块)
- 用C/C++来实现 Node.js 的模块(一)
- NODE.JS学习笔记——CRYPTO 加密模块
- Node.js学习笔记3【核心模块--event】
- 详解Node.js API系列 Http模块(2) CNodejs爬虫实现