//引用 var url = require("url"); var queryString = require("querystring");
該模塊比較簡單,方法也只有三個node
對於一個 URL 字符串,其組成部分會有全部不一樣,其中有些部分只有在URL字符串中存在時,對應字段纔會出如今解析後對象中。如下是一個 URL 例子:ui
http://user:pass@host.com:8080/p/a/t/h?query=string#hash
url
解析後對象字段以下: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'
path
: pathname
和 search
的合集
例如: '/p/a/t/h?query=string'
query
: 查詢字符串中的參數部分(問號後面部分字符串),或者使用 querystring.parse()
解析後返回的對象
例如: 'query=string'
or {'query':'string'}
hash
: 錨點部分(即:「#」及其後的部分)
例如: '#hash'
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。
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不管前面是否有# (井號, 錨點),都會一樣處理 */
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.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'
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: '' }
querystring.escape
,querystring.unescape
:這兩個內置方法,分別在上述兩個方法的內置使用,若是有須要分別格式化和解碼URL字符串。
url.parse(string).query | url.parse(string).pathname | | | | | ------ ------------------- http://localhost:8888/start?foo=bar&hello=world --- ----- | | | | querystring(string)["foo"] | | querystring(string)["hello"]