标签:
什么是模块?
模块分为原生模块(node.jsAPI提供的原生模块,在启动时已经被加载)和
文件模块(动态加载模块,主要由原生模块module来实现和完成。通过调
用node.js的require方法来实现加载)。
//调用原生API的方法
var httpModule =require(‘http‘);//加载http模块
httpModule是require原生http模块返回的对象。类似java中类的对象。
//调用文件模块的方法
var test =require(‘/path/.../test.js‘)
也可为
var test =require(‘/path/.../test‘)
可以看出,文件模块是需要指定路径的。
返回对象test可以调用文件的那些属性和方法呢?
node.js中明确指出,只有exports和module.exports对象暴露给该外部的
属性个方法,可以使用require对象进行调用。
例如如下模块
/** * *exports test code * */ exports.name="danhuang";//exports暴露name属性 exports.happy=function(){console.log("mm")};//exports暴露happy方 法 function love(){console.log("520");}
以上代码,只可通过require的对象调用name属性和happy方法。
可以通过打印对象,查看它所拥有的属性和方法
console.log(test);
二、nodejs实现web解析DNS
1.需要用到那些模块
以下为源代码
getDNS.js
//首先require加载需要的nodejs原生模块 var http=require("http"),//服务器创建 dns=require("dns"),//DNS查询 fs=require("fs"),//文件操作 url=require("url"),//url处理 querystring =require("querystring");字符串处理 //创建服务器 http.createServer(function(req,res){ //添加http响应的头信息 res.writeHead(200,{‘Content-Type‘:‘text/html‘}); //获取当前index.html的路径 var readPath=_dirname+‘/‘+url.parse(‘index.html‘).pathname; //获取index.html的文件数据 var indexPage=fs.readFileSyns(readPath); //执行http响应返回到客户端 res.end(indexPage); }).listen(3000,"127.0.0.1");
index.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>DNS查询</title>
</head>
<body>
<h1 style="text-aglin:center">DNS查询工具</h1>
<div style="text-aglin:center">
<form action="/parse" method="post">
查询DNS:<input type="text" name="search_dns"/>
<input type="submit" value="查询" />
</form>
</div>
</body>
</html>
运行getDNS.js文件
在cmd中输入,如果getDNS文件的存放路径不再默认位置,需要先打开存放位置 cd C:nodejs/test/(假设我的文件存放目录为C盘的nodejs文件夹下的test文件夹内)
node getDNS.js
然后打开浏览器输入node.js的监听端口,即getDNS.就是文件中指定的端口:http://127.0.0.1:3000 ,服务器会返回页面到客户端
注意:上面的代码是无法使用form表单提交的,需要将getDNS.js中的代码进行修改
修改后如下:
//首先require加载需要的nodejs原生模块 var http=require("http"),//服务器创建 dns=require("dns"),//DNS查询 fs=require("fs"),//文件操作 url=require("url"),//url处理 querystring =require("querystring");字符串处理 //创建服务器 http.createServer(function(req,res){ //获取当前请求资源的路径 var pathname=url.parse(req.url).pathname; //设置返回客户端的数据格式 req.setEncoding("utf8"); //添加http响应的头信息 res.writeHead(200,{‘Content-Type‘:‘text/html‘}); //处理不同的请求资源,分发处理 router(res,req,pathname); }).listen(3000,"127.0.0.1"); function router (res,req,pathname) { switch(pathname){//根据pathname不同,执行不同的处理逻辑 case "/parse": parseDns(res,req)//执行域名解析 break; default: goIndex(res,req)//显示html页面 } } function goIndex (res,req) { //获取文件路径 var readPath =_dirname+‘/‘+url.parse(‘index.html‘).pathname; //读取html文件信息 var indexPage =fs.readFileSyns(readPath); //通过res响应html数据到客户端 res.end(indexPage); } function parseDns (res,req) { var postData=""; //读取客户端传递的数据,并将数据添加到pastData中 req.addListener("data",function(postDataChunk){ postData += postDataChunk; }); //http响应html页面信息,数据接收完成,end函数触发 req.addListener("end",function(){ //getDNS异步域名解析,执行完成活回调执行function(domain,addresses){},domain是传递的域名参数,addresses是ip地址列表 var retData = getDns(postData,function(domain,addresses){ res.writeHead(200,{‘Content-Type‘:‘text/html‘}); res.end("<html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <div style="text-aglin:center"> Domain:<span style=‘color:red‘>"+domain+"</span> IP: <span style="color:red">"+addresses.join(‘,‘)+"</span> </div> </html>"); }); return; }); } function getDns (postData,callback) { //获取postdata数据中键值为search_dns的值 var domain=querystring.parse(postData).search_dns; //异步解析域名 dns.resolve(domain,function(err,addresses){ if(!addresses){ addresses=[‘域名不存在‘] } callback(domain,addresses); }); }
以上就是通过nodejs实现一个DNS域名解析的网站。一个真正意义上的网站算是搭建完成了!!
纯手打,好累.....
标签:
原文地址:http://www.cnblogs.com/ermu-learn/p/5448388.html