您的位置:首页 > Web前端 > Node.js

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解析的功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  node.js