• 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域名解析的网站。一个真正意义上的网站算是搭建完成了!!

    纯手打,好累.....

  • 相关阅读:
    摘抄博文
    html5中getContext()方法和CanvasRenderingContext2D对象详解
    三十四、Android Spinner控件之键值对用法
    二十七、Android之GPS定位详解
    J2EE用监听器实现同一用户只能有一个在线
    三十二、Android上传文件至服务器
    二十六、Android WebView缓存
    三十九、Android原理 不需要关闭后台运行程序
    三十七、android sqlite3详解
    struts2之注解权限控制
  • 原文地址:https://www.cnblogs.com/ermu-learn/p/5448388.html
Copyright © 2020-2023  润新知