nodejs概論(實操篇)

什麼是模塊?javascript

模塊分爲原生模塊(node.jsAPI提供的原生模塊,在啓動時已經被加載)和
文件模塊(動態加載模塊,主要由原生模塊module來實現和完成。經過調
用node.js的require方法來實現加載)。
//調用原生API的方法html

var httpModule =require('http');//加載http模塊

httpModule是require原生http模塊返回的對象。相似java中類的對象。
//調用文件模塊的方法java

var test =require('/path/.../test.js')

也可爲node

var test =require('/path/.../test')

能夠看出,文件模塊是須要指定路徑的。
返回對象test能夠調用文件的那些屬性和方法呢?
node.js中明確指出,只有exports和module.exports對象暴露給該外部的
屬性個方法,能夠使用require對象進行調用。web

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);app

2、nodejs實現web解析DNSdom

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

 

純手打,好累.....

相關文章
相關標籤/搜索