最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

NodeJS學(xué)習(xí)筆記之(Url,QueryString,Path)模塊

 更新時間:2015年01月13日 11:26:14   投稿:hebedich  
今天我們來看一下在nodejs中路徑的相關(guān)操作方法。在我們開發(fā)過程中路徑主要有:URL路徑,在瀏覽器中進(jìn)行使用,當(dāng)然這個也包含查詢字符串QueryString的相關(guān)操作;而另一種是磁盤路徑,主要用于文件等等進(jìn)行操作,我們稱為Path,所以我將它們放在一起進(jìn)行總結(jié)學(xué)習(xí)。

一,開篇分析

這篇文章把這三個模塊拿來一起說,原因是它們各自的篇幅都不是很長,其次是它們之間存在著依賴關(guān)系,所以依次介紹并且實例分析。廢話不多說了,請看下面文檔:

(1),"Url模塊"

  來個小栗子:  

復(fù)制代碼 代碼如下:

 var url = require('url');
 var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ;
 console.log(typeof url.parse(queryUrl)) ;
 console.log(url.parse(queryUrl)) ;

  運行結(jié)果: 

復(fù)制代碼 代碼如下:

 object // typeof
 
 {
     protocol: 'http:',
     slashes: true,
     auth: null,
     host: 'localhost:8888',
     port: '8888',
     hostname: 'localhost',
     hash: null,
     search: '?name=bigbear&memo=helloworld',
     query: 'name=bigbear&memo=helloworld',
     pathname: '/bb',
     path: '/bb?name=bigbear&memo=helloworld',
     href: 'http://localhost:8888/bb?name=bigbear&memo=helloworld'
 }

 加以說明如下:  

  protocol: 請求協(xié)議
  host: URL主機(jī)名已全部轉(zhuǎn)換成小寫, 包括端口信息
  auth:URL中身份驗證信息部分
  hostname:主機(jī)的主機(jī)名部分, 已轉(zhuǎn)換成小寫
  port: 主機(jī)的端口號部分
  pathname: URL的路徑部分,位于主機(jī)名之后請求查詢之前
  search: URL 的“查詢字符串”部分,包括開頭的問號。
  path: pathname 和 search 連在一起。
  query: 查詢字符串中的參數(shù)部分(問號后面部分字符串),或者使用 querystring.parse() 解析后返回的對象。
  hash: URL 的 “#” 后面部分(包括 # 符號)

 補(bǔ)充api:"url.format(urlObj)"
  

  作用:輸入一個 URL 對象,返回格式化后的 URL 字符串。

(2),"QueryString模塊"

  "QueryString" 模塊用于實現(xiàn)URL參數(shù)字符串與參數(shù)對象的互相轉(zhuǎn)換,來個栗子,如下所示:

復(fù)制代碼 代碼如下:

 var url = require('url');
 var qs = require('querystring');
 var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ;
 queryUrl = url.parse(queryUrl).query ;
 console.log(queryUrl) ;
 console.log(qs.parse(queryUrl)) ;

  運行結(jié)果·如下:

復(fù)制代碼 代碼如下:

    name=bigbear&memo=helloworld
    {
      name: 'bigbear',
      memo: 'helloworld'
    }

  補(bǔ)充api:

  querystring.stringify(obj, [sep], [eq])------序列化一個對象到一個 query string。

  可以選擇是否覆蓋默認(rèn)的分割符('&')和分配符('=')?!           ?/p>

  querystring.stringify({foo: 'bar', baz: 'qux'}, ';', ':')// 返回如下字串'foo:bar;baz:qux'

  querystring.parse(str, [sep], [eq], [options])------將一個 query string 反序列化為一個對象??梢赃x擇是否覆蓋默認(rèn)的分割符('&')和分配符('=')。
  
  options對象可能包含maxKeys屬性(默認(rèn)為1000),它可以用來限制處理過的鍵(key)的數(shù)量.設(shè)為0可以去除鍵(key)的數(shù)量限制.
  
  示例:querystring.parse('foo=bar&baz=qux&baz=quux&corge') // { foo: 'bar', baz: ['qux', 'quux'], corge: '' }

(3),"Path模塊"

  本模塊包含一套用于處理和轉(zhuǎn)換文件路徑的工具集。幾乎所有的方法僅對字符串進(jìn)行轉(zhuǎn)換, 文件系統(tǒng)是不會檢查路徑是否真實有效的。

  先來一個簡單的栗子:    

復(fù)制代碼 代碼如下:

 var url = require('url');
 var qs = require('querystring');
 var path = require("path") ;
 var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ;
 var root = path.basename(queryUrl) ;
 console.log(root) ; // bb?name=bigbear&memo=helloworld

  返回路徑中的最后一部分,以”/“分割。

復(fù)制代碼 代碼如下:

 var url = require('url');
 var qs = require('querystring');
 var path = require("path") ;
 var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ;
 var root = path.basename(queryUrl) ;
 console.log(root) ; // bb?name=bigbear&memo=helloworld
 var ext = path.extname(root) ;
 console.log(ext || "Not Ext Name !") ; // Not Ext Name !

  由于api過多,以上只列出來了常用的幾個,大家需認(rèn)真閱讀文檔。

二,綜合栗子

場景描述------服務(wù)器接到不同情況的請求,通過 “Url” 分別做不同處理,代碼如下:

 ?。?),建立”index.html“  

復(fù)制代碼 代碼如下:

 <!doctype html>
 <html>
     <head>
         <title>Bigbear</title>
         <meta content="IE=8" http-equiv="X-UA-Compatible"/>
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
         <style type="text/css">
             div {
                 margin-top: 50px;
                 width: 100%;
                   margin: 0px;
                 height:120px;
                 line-height:120px;
                   color:#fff;
                   font-size:22px;
                   background:#ff9900;
                 text-align: center;
             }
         </style>
         <script src="index.js"></script>
     </head>
     <body>
         <div>Hello,大熊!</div>
     </body>
 </html>

 ?。?),建立”index.js“

alert("Hello bb !") ; // 為了測試就這么一句代碼
 ?。?),建立”server.js“

復(fù)制代碼 代碼如下:

var http = require("http");
var fs = require('fs');
var url = require('url');
var path = require("path") ;
http.createServer(function(request,response) {
    var method = request.method ;
    method = method.toLowerCase() ;
    var fileName = path.basename(request.url) ;
    var extName = path.extname(fileName) ;
    var root = "./" ;
    if("get" == method){
        if(extName){
            fs.readFile("./" + fileName,"utf-8",function (error,data){
                if(error)throw error ;
                response.writeHead(200,{
                    "Content-Type": {
                         ".css": "text/css" ,
                         ".js" : "application/javascript"
                  }[extName]
                }) ;
                response.write(data) ;
                response.end() ;
            });
        }
        else{
            fs.readFile(root + "index.html","utf-8",function (error,data){
                if(error)throw error ;
                response.writeHead(200,{
                    "Content-Type" : "text/html"
                });
                response.write(data) ;
                response.end() ;
            });
        }
    }
    else if("post" == request.url){
        // handle post here
    }
}).listen(8888) ;
console.log("Web Server Running , Port On ---> 8888") ;

 
  node server.js 運行一下。

三,總結(jié)一下

(1),理解上述三個模塊之間的聯(lián)系,靈活使用 。
(2),熟練使用 "Url,QueryString,Path" 三個模塊相關(guān)的api。
(3),最后強(qiáng)調(diào):理解上面例子中的代碼意圖,不斷重構(gòu),不斷總結(jié)。

相關(guān)文章

  • 你應(yīng)該知道的幾類npm依賴包管理詳解

    你應(yīng)該知道的幾類npm依賴包管理詳解

    npm 是node.js 里的包管理器,是一個命令行工具,下面這篇文章主要給大家介紹了關(guān)于你應(yīng)該知道的幾類npm依賴包管理,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • Node.js EventEmmitter事件監(jiān)聽器用法實例分析

    Node.js EventEmmitter事件監(jiān)聽器用法實例分析

    這篇文章主要介紹了Node.js EventEmmitter事件監(jiān)聽器用法,結(jié)合實例形式分析了EventEmmitter事件監(jiān)聽器相關(guān)函數(shù)與使用技巧,需要的朋友可以參考下
    2019-01-01
  • node 版本切換的實現(xiàn)

    node 版本切換的實現(xiàn)

    這篇文章主要介紹了node 版本切換的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • node.js對于數(shù)據(jù)庫MySQL基本操作實例總結(jié)【增刪改查】

    node.js對于數(shù)據(jù)庫MySQL基本操作實例總結(jié)【增刪改查】

    這篇文章主要介紹了node.js對于數(shù)據(jù)庫MySQL基本操作,結(jié)合實例形式總結(jié)分析了node.js針對mysql數(shù)據(jù)庫基本配置、連接與增刪改查相關(guān)操作技巧,需要的朋友可以參考下
    2023-04-04
  • nodejs 日志模塊winston的使用方法

    nodejs 日志模塊winston的使用方法

    本篇文章主要介紹了nodejs 日志模塊winston的使用方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • 關(guān)于NodeJs和JAVA建立socket連接方式

    關(guān)于NodeJs和JAVA建立socket連接方式

    這篇文章主要介紹了關(guān)于NodeJs和JAVA建立socket連接方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 詳解用node編寫自己的cli工具

    詳解用node編寫自己的cli工具

    這篇文章主要介紹了詳解用node編寫自己的cli工具,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Node.js與PHP、Python的字符處理性能對比

    Node.js與PHP、Python的字符處理性能對比

    因為后續(xù)考慮實現(xiàn) Fl 引擎的Node.js版本,所以對比了下Node.js和PHP的字符處理性能。發(fā)現(xiàn)Node.js真是甩了PHP幾條街啊,再測試了下Python,比PHP還慢。
    2014-07-07
  • mac上node.js環(huán)境的安裝測試

    mac上node.js環(huán)境的安裝測試

    這篇文章主要為大家詳細(xì)介紹了mac上node.js環(huán)境的安裝測試,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 關(guān)于npm install過程失敗的幾種處理方式

    關(guān)于npm install過程失敗的幾種處理方式

    這篇文章主要介紹了關(guān)于npm install過程失敗的幾種處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評論

共和县| 石河子市| 延长县| 厦门市| 宜宾县| 大荔县| 资溪县| 营口市| 乌什县| 衡水市| 晋宁县| 民和| 奈曼旗| 博兴县| 湖北省| 安岳县| 盖州市| 惠来县| 洛阳市| 达拉特旗| 巴东县| 宁明县| 杭锦后旗| 仪陇县| 彰化市| 钟祥市| 固安县| 乡宁县| 寿光市| 绥宁县| 偏关县| 广宗县| 新沂市| 兴城市| 盐山县| 洞口县| 永安市| 隆尧县| 洛扎县| 辉县市| 峨边|