nodejs概论(实操篇)

什么是模块?

模块分为原生模块(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域名解析的网站。一个真正意义上的网站算是搭建完成了!!

纯手打,好累.....

原文地址:https://www.cnblogs.com/ermu-learn/p/5448388.html