什么是模块?

模块分为原生模块(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和module.exports是什么?可参考一下连接http://cnodejs.org/topic/5231a630101e574521e45ef8

例如如下模块

/**
*
*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(8888,"127.0.0.1");
// console.log("server run at http://127.0.0.1:8888/");
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.readFileSync(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域名解析的网站。一个真正意义上的网站算是搭建完成了!!

纯手打,好累.....

nodejs概论(实操篇)的更多相关文章

  1. HDFS集群PB级数据迁移方案-DistCp生产环境实操篇

    HDFS集群PB级数据迁移方案-DistCp生产环境实操篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 用了接近2个星期的时间,终于把公司的需要的大数据组建部署完毕了,当然,在部 ...

  2. ESP8266 NodeMCU小白手把手入门(实操篇)以土壤湿度和DHT传感器为例讲解读取传感器的值

    物联网使得现实世界中的实体和数字世界比以往任何时候都更紧密地联系在一起.NodeMCU作为其中的一个重要设备,作用之一就是与传感器相连以实现万物互联通讯.这篇关于NodeMCU的实操篇以土壤湿度传感器 ...

  3. Linux实操篇

    一:用户管理.群组管理 增: 1.指定群组添加账户: groupadd test 创建test用户组useradd -g test(用户组) xiaoming(用户名)       ---- 创建us ...

  4. Linux实操篇 vi和vim编辑器

    vi和vim的基本介绍 所有的Linux系统都会内建vi文本编辑器. vim具有程序编辑的能力,可以看做是vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计.代码补完.编译及错误跳转等 ...

  5. python 学习分享-购物车实操篇

    程序要求如下: '''购物车程序: 启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够,够就直接扣款,不够就 ...

  6. 使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)

    使用Jenkins与Docker持续集成与发布NetCore项目(教程一) 原文地址:https://www.cnblogs.com/Jackyye/p/12588182.html 基本环境 该教程的 ...

  7. 02_Linux实操篇

    第五章 VI和VIM编辑器 5.1. VI和VIM基本介绍 Vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器.由于对Unix及Linux系统的任何版本,Vi ...

  8. redis实操-sentinel

    本文主要记录一些操作步骤,作为自己学习的一个记录,也供虚拟机上学习redis的人参考. 实操篇,可以参考 http://redis.cn/ 主从复制实操 在test目录下新建配置进行练习 1.mkdi ...

  9. Kafka集群优化篇-调整broker的堆内存(heap)案例实操

    Kafka集群优化篇-调整broker的堆内存(heap)案例实操 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看kafka集群的broker的堆内存使用情况 1>. ...

随机推荐

  1. Response对象

    Response对象来自HttpResponse类,它用于向客户端输出信息或设置客户端输出状态,使用Response对象可以直接发送信息给浏览器.重定向浏览器到另一个URL或设置cookie的值等. ...

  2. Delphi重载,覆盖,多态

    一.override 重载 type TFigure = class procedure Draw; virtual;//(我的理解是)父类中可以使用父类的,子类中使用子类的.与“四”是有区别的. e ...

  3. MongoDB权限提升漏洞(CVE-2013-4650)

    漏洞版本: MongoDB 2.4.0-2.4.4 MongoDB 2.5.0 漏洞描述: CVE ID: CVE-2013-4650 MongoDB是一个高性能,开源,无模式的文档型数据库,是当前N ...

  4. ♫【异步】短小强悍的JavaScript异步调用库

    短小强悍的JavaScript异步调用库 var queue = function(funcs, scope) { (function next() { if(funcs.length > 0) ...

  5. slf4j简介

    SLF4J不是日志框架而是一个简单日志门面,它的目的是允许最终用户在部署时使用期望的日志框架. The Simple Logging Facade for Java (SLF4J) serves as ...

  6. HDOJ(HDU) 2107 Founding of HDU(找最大值)

    Problem Description 经过慎重的考虑,XHD,8600, LL,Linle以及RPG等ACM队员集体退役,甚至正在酝酿退学. 为什么?要考研?那也不用退学呀- 当然不是!真正的原因是 ...

  7. CodeForces 587A

    题目链接: http://codeforces.com/problemset/problem/587/A 题意: 输入n个数,在这n个数中,寻找有多少个数不能消除掉 消除方法:两个相同的数消除后,生成 ...

  8. Nodejs in Visual Studio Code 10.IISNode

    1.开始 Nodejs in Visual Studio Code 08.IIS : http://www.cnblogs.com/mengkzhaoyun/p/5410185.html 参考此篇内容 ...

  9. 数据结构算法集---C++语言实现

    //数据结构算法集---C++语言实现 //各种类都使用模版设计,可以对各种数据类型操作(整形,字符,浮点) /////////////////////////// // // // 堆栈数据结构 s ...

  10. HDU 4751 Divide Groups 2013 ACM/ICPC Asia Regional Nanjing Online

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4751 题目大意:判断一堆人能否分成两组,组内人都互相认识. 解题思路:如果两个人不是相互认识,该两人之 ...