一,開篇分析javascript
這篇文章把這三個模塊拿來一塊兒說,緣由是它們各自的篇幅都不是很長,其次是它們之間存在着依賴關係,因此依次介紹而且實例分析。廢話很少說了,請看下面文檔:css
(1),"Url模塊"html
來個小栗子: java
1 var url = require('url'); 2 var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ; 3 console.log(typeof url.parse(queryUrl)) ; 4 console.log(url.parse(queryUrl)) ;
運行結果: node
1 object // typeof 2 3 { 4 protocol: 'http:', 5 slashes: true, 6 auth: null, 7 host: 'localhost:8888', 8 port: '8888', 9 hostname: 'localhost', 10 hash: null, 11 search: '?name=bigbear&memo=helloworld', 12 query: 'name=bigbear&memo=helloworld', 13 pathname: '/bb', 14 path: '/bb?name=bigbear&memo=helloworld', 15 href: 'http://localhost:8888/bb?name=bigbear&memo=helloworld' 16 }
加以說明以下: api
protocol: 請求協議服務器
host: URL主機名已所有轉換成小寫, 包括端口信息app
auth:URL中身份驗證信息部分工具
hostname:主機的主機名部分, 已轉換成小寫post
port: 主機的端口號部分
pathname: URL的路徑部分,位於主機名以後請求查詢以前
search: URL 的「查詢字符串」部分,包括開頭的問號。
path: pathname 和 search 連在一塊兒。
query: 查詢字符串中的參數部分(問號後面部分字符串),或者使用 querystring.parse() 解析後返回的對象。
hash: URL 的 「#」 後面部分(包括 # 符號)
做用:輸入一個 URL 對象,返回格式化後的 URL 字符串。
(2),"QueryString模塊"
"QueryString"
模塊用於實現URL參數字符串與參數對象的互相轉換,來個栗子,以下所示:
1 var url = require('url'); 2 var qs = require('querystring'); 3 var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ; 4 queryUrl = url.parse(queryUrl).query ; 5 console.log(queryUrl) ; 6 console.log(qs.parse(queryUrl)) ;
運行結果·以下:
name=bigbear&memo=helloworld
{
name: 'bigbear',
memo: 'helloworld'
}
補充api:
querystring.stringify(obj, [sep], [eq])------序列化一個對象到一個 query string。
能夠選擇是否覆蓋默認的分割符('&')和分配符('=')。
querystring.stringify({foo: 'bar', baz: 'qux'}, ';', ':')// 返回以下字串'foo:bar;baz:qux'
querystring.parse(str, [sep], [eq], [options])------將一個 query string 反序列化爲一個對象。能夠選擇是否覆蓋默認的分割符('&')和分配符('=')。
options對象可能包含maxKeys屬性(默認爲1000),它能夠用來限制處理過的鍵(key)的數量.設爲0能夠去除鍵(key)的數量限制.
示例:querystring.parse('foo=bar&baz=qux&baz=quux&corge') // { foo: 'bar', baz: ['qux', 'quux'], corge: '' }
(3),"Path模塊"
本模塊包含一套用於處理和轉換文件路徑的工具集。幾乎全部的方法僅對字符串進行轉換, 文件系統是不會檢查路徑是否真實有效的。
先來一個簡單的栗子:
1 var url = require('url'); 2 var qs = require('querystring'); 3 var path = require("path") ; 4 var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ; 5 var root = path.basename(queryUrl) ; 6 console.log(root) ; // bb?name=bigbear&memo=helloworld
返回路徑中的最後一部分,以」/「分割。
1 var url = require('url'); 2 var qs = require('querystring'); 3 var path = require("path") ; 4 var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ; 5 var root = path.basename(queryUrl) ; 6 console.log(root) ; // bb?name=bigbear&memo=helloworld 7 var ext = path.extname(root) ; 8 console.log(ext || "Not Ext Name !") ; // Not Ext Name !
因爲api過多,以上只列出來了經常使用的幾個,你們需認真閱讀文檔。
二,綜合栗子
場景描述------服務器接到不一樣狀況的請求,經過 「Url」 分別作不一樣處理,代碼以下:
(1),創建」index.html「
1 <!doctype html> 2 <html> 3 <head> 4 <title>Bigbear</title> 5 <meta content="IE=8" http-equiv="X-UA-Compatible"/> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <style type="text/css"> 8 div { 9 margin-top: 50px; 10 width: 100%; 11 margin: 0px; 12 height:120px; 13 line-height:120px; 14 color:#fff; 15 font-size:22px; 16 background:#ff9900; 17 text-align: center; 18 } 19 </style> 20 <script src="index.js"></script> 21 </head> 22 <body> 23 <div>Hello,大熊!</div> 24 </body> 25 </html>
(2),創建」index.js「
alert("Hello bb !") ; // 爲了測試就這麼一句代碼
(3),創建」server.js「
1 var http = require("http"); 2 var fs = require('fs'); 3 var url = require('url'); 4 var path = require("path") ; 5 http.createServer(function(request,response) { 6 var method = request.method ; 7 method = method.toLowerCase() ; 8 var fileName = path.basename(request.url) ; 9 var extName = path.extname(fileName) ; 10 var root = "./" ; 11 if("get" == method){ 12 if(extName){ 13 fs.readFile("./" + fileName,"utf-8",function (error,data){ 14 if(error)throw error ; 15 response.writeHead(200,{ 16 "Content-Type": { 17 ".css": "text/css" , 18 ".js" : "application/javascript" 19 }[extName] 20 }) ; 21 response.write(data) ; 22 response.end() ; 23 }); 24 } 25 else{ 26 fs.readFile(root + "index.html","utf-8",function (error,data){ 27 if(error)throw error ; 28 response.writeHead(200,{ 29 "Content-Type" : "text/html" 30 }); 31 response.write(data) ; 32 response.end() ; 33 }); 34 } 35 } 36 else if("post" == request.url){ 37 // handle post here 38 } 39 }).listen(8888) ; 40 console.log("Web Server Running , Port On ---> 8888") ;
node server.js 運行一下。
三,總結一下
(1),理解上述三個模塊之間的聯繫,靈活使用 。
(2),熟練使用 "Url,QueryString,Path" 三個模塊相關的api。
(3),最後強調:理解上面例子中的代碼意圖,不斷重構,不斷總結。
哈哈哈,本篇結束,未完待續,但願和你們多多交流夠溝通,共同進步。。。。。。呼呼呼……(*^__^*)