什麼是模塊?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域名解析的網站。一個真正意義上的網站算是搭建完成了!!
純手打,好累.....