node.js之Url & QueryString模塊

 

//引用
var url = require("url");
var queryString  = require("querystring");

URL模塊

該模塊比較簡單,方法也只有三個node

1. URL各部分說明

對於一個 URL 字符串,其組成部分會有全部不一樣,其中有些部分只有在URL字符串中存在時,對應字段纔會出如今解析後對象中。如下是一個 URL 例子:ui

http://user:pass@host.com:8080/p/a/t/h?query=string#hashurl

解析後對象字段以下:spa

href: 解析前的完整原始 URL,協議名和主機名已轉爲小寫
例如: 'http://user:pass@host.com:8080/p/a/t/h?query=string#hash'code

protocol: 請求協議,小寫
例如: 'http:'orm

slashes: 協議的「:」號後是否有「/」
例如: true or false對象

host: URL主機名,包括端口信息,小寫
例如: 'host.com:8080'three

auth: URL中的認證信息
例如: 'user:pass'字符串

hostname: 主機名,小寫
例如: 'host.com'string

port: 主機的端口號
例如: '8080'

pathname: URL中路徑
例如: '/p/a/t/h'

search: 查詢對象,即:queryString,包括以前的問號「?」
例如: '?query=string'

pathpathname 和 search的合集
例如: '/p/a/t/h?query=string'

query: 查詢字符串中的參數部分(問號後面部分字符串),或者使用 querystring.parse()解析後返回的對象
例如: 'query=string' or {'query':'string'}

hash: 錨點部分(即:「#」及其後的部分)
例如: '#hash'

2. 將URL字符串轉換爲對象:url.parse(urlStr[, parseQueryString][, slashesDenoteHost])

url.parse()方法用於解析URL對象,解析後返回一個JSON對象。示例以下:

var url = require('url');

var urlString = 'http://user:pass@host.com:8080/p/a/t/h?query=string#hash';
var result = url.parse(urlString);
console.log(result);

//輸出結果以下
{ protocol: 'http:',
  slashes: true,
  auth: 'user:pass',
  host: 'host.com:8080',
  port: '8080',
  hostname: 'host.com',
  hash: '#hash',
  search: '?query=string',
  query: 'query=string',
  pathname: '/p/a/t/h',
  path: '/p/a/t/h?query=string',
  href: 'http://user:pass@host.com:8080/p/a/t/h?query=string#hash' 
}

//第二個可選參數設置爲true時,會使用querystring模塊來解析URL中德查詢字符串部分,默認爲 false。

//輸出結果以下
{ protocol: 'http:',
  slashes: true,
  auth: 'user:pass',
  host: 'host.com:8080',
  port: '8080',
  hostname: 'host.com',
  hash: '#hash',
  search: '?query=string',
  query: {query:"string"},
  pathname: '/p/a/t/h',
  path: '/p/a/t/h?query=string',
  href: 'http://user:pass@host.com:8080/p/a/t/h?query=string#hash' 
}

//第三個可參數設置爲 true時,會把諸如 //foo/bar 這樣的URL解析爲 { host: 'foo', pathname: '/bar' } 而不是 { pathname: '//foo/bar' }。 默認爲 false。

3. 將對象格式化爲URL字符串:url.format(urlObj)

url.resolve()用於格式化URL對象。輸入一個 URL 對象,返回格式化後的 URL 字符串。示例以下:

var url = require('url');

var urlObj = { 
  protocol: 'http:',
    slashes: true,
    hostname: 'itbilu.com',
    port: 80,
    hash: '#hash',
    search: '?query=string',
    path: '/nodejs?query=string'
}
var result = url.format(urlObj);
console.log(result);

//輸出結果以下
http://itbilu.com:80?query=string#hash
/*
*傳入的URL對象會作如下處理:
*
*href 屬性會被忽略
*protocol不管是否有末尾的 : (冒號),會一樣的處理
*這些協議包括 http, https, ftp, gopher, file 後綴是 :// (冒號-斜槓-斜槓).
*全部其餘的協議如 mailto, xmpp, aim, sftp, foo, 等 會加上後綴 : (冒號)
*auth 若是有將會出現.
*hostname 若是 host 屬性沒被定義,則會使用此屬性.
*port 若是 host 屬性沒被定義,則會使用此屬性.
*host 優先使用,將會替代 hostname 和port
*pathname 將會一樣處理不管結尾是否有/ (斜槓)
*search 將會替代 query屬性
*query (object類型; 詳細請看 querystring) 若是沒有 search,將會使用此屬性.
*search 不管前面是否有 ? (問號),都會一樣的處理
*hash不管前面是否有# (井號, 錨點),都會一樣處理
*/

4. URL路徑處理:url.resolve(from, to)

url.resolve()方法用於處理URL路徑,也能夠用於處理錨點。示例以下:

url.resolve('/one/two/three', 'four')         // '/one/two/four'
url.resolve('http://example.com/', '/one')    // 'http://example.com/one'
url.resolve('http://example.com/one', '/two') // 'http://example.com/two'

queryString 模塊

查詢字符串主要由兩個方法和內置格式化方法組成,一個是將對象轉換爲字符串,一個則是相反,將字符串轉換爲對象:

1.querystring.stringify(obj, [sep], [eq])

將JSON對象格式化爲查詢字符串格式的字符串,默認的分隔符爲:「&」和「=」,具體能夠看一下如下代碼:

querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' })

// returns
'foo=bar&baz=qux&baz=quux&corge='
querystring.stringify({foo: 'bar', baz: 'qux'}, ';', ':')
// returns
'foo:bar;baz:qux'

2.querystring.parse(str, [sep], [eq], [options])

根據「&」和「=」將字符串進行分割,反序列化爲JSON對象,而options包含的maxKeys默認設置爲1000,若是將其設置爲0則表示沒這個限制。

querystring.parse('foo=bar&baz=qux&baz=quux&corge')

// returns
{ foo: 'bar', baz: ['qux', 'quux'], corge: '' }

3.querystring.escapequerystring.unescape

這兩個內置方法,分別在上述兩個方法的內置使用,若是有須要分別格式化和解碼URL字符串。

QueryString模塊和Url模塊之間的關係

url.parse(string).query
                                           |
           url.parse(string).pathname      |
                       |                   |
                       |                   |
                     ------ -------------------
http://localhost:8888/start?foo=bar&hello=world
                                ---       -----
                                 |          |
                                 |          |
              querystring(string)["foo"]    |
                                            |
                         querystring(string)["hello"]
相關文章
相關標籤/搜索