node.js的URL模塊學(xué)習(xí)
URL統(tǒng)一資源定位符
URL中文文檔:協(xié)議+域名/IP地址
該模塊包含用以 URL 解析的實用函數(shù)藐握。 使用 require('url') 來調(diào)用該模塊。
不同的 URL 字符串解析后返回的對象會有一些額外的字段信息潦匈,僅當(dāng)該部分出現(xiàn)在 URL 中才會有对蒲。以下是一個 URL 例子:
http://user:pass@host.com:8080/p/a/t/h?query=string#hash
- href: 所解析的完整原始 URL萝快。協(xié)議名和主機(jī)名都已轉(zhuǎn)為小寫。
例如: `'http://user:pass@host.com:8080/p/a/t/h?query=string#hash'`
- protocol: 請求協(xié)議庙睡,小寫,其中常用的協(xié)議有:http https ftp mailto file等
例如: 'http:'
- host: URL主機(jī)名已全部轉(zhuǎn)換成小寫, 包括端口信息
例如: `'host.com:8080'`
- auth:URL中身份驗證信息部分婶熬,通常已經(jīng)設(shè)置好了,訪問時不用加上
例如: `'user:pass'`
- hostname:主機(jī)的主機(jī)名部分, 已轉(zhuǎn)換成小寫 主機(jī)的域名
例如: `'host.com'`
- port: 主機(jī)的端口號部分埃撵,端口號可以自己指定
例如: `'8080'`
- pathname: URL的路徑部分,位于主機(jī)名之后請求查詢之前赵颅,用'/'隔開
例如: `'/p/a/t/h'`
- search: URL 的“查詢字符串”部分,包括開頭的問號暂刘。
例如: `'?query=string'`
- path: pathname 和 search 連在一起饺谬。
例如: `'/p/a/t/h?query=string'`
- query: 查詢字符串中的參數(shù)部分(問號后面部分字符串),或者使用 querystring.parse() 解析后返回的對象。
例如: `'query=string'` or `{'query':'string'}`
- hash: URL 的 “#” 后面部分(包括 # 符號)
例如: `'#hash'`
URL模塊提供的方法:
url.parse(urlStr, [parseQueryString], [slashesDenoteHost])
輸入 URL 字符串募寨,返回一個對象族展。
- 將第二個參數(shù)設(shè)置為 true 則使用 querystring 模塊來解析 URL 中的查詢字符串部分,默認(rèn)為 false拔鹰。
- 將第三個參數(shù)設(shè)置為 true 來把諸如 //foo/bar 這樣的URL解析為 { host: 'foo', pathname: '/bar' } 而不是 { pathname: '//foo/bar' }仪缸。 默認(rèn)為 false。
url.format(urlObj)
輸入一個 URL 對象列肢,返回格式化后的 URL 字符串恰画。
- href 屬性會被忽略處理.
- protocol無論是否有末尾的 : (冒號),會同樣的處理
- 這些協(xié)議包括 http, https, ftp, gopher, file 后綴是 :// (冒號-斜杠-斜杠).
- 所有其他的協(xié)議如 mailto, xmpp, aim, sftp, foo, 等 會加上后綴 : (冒號)
- auth 如果有將會出現(xiàn).
- hostname 如果 host 屬性沒被定義瓷马,則會使用此屬性.
- port 如果 host 屬性沒被定義拴还,則會使用此屬性.
- host 優(yōu)先使用,將會替代 hostname 和port
- pathname 將會同樣處理無論結(jié)尾是否有/ (斜杠)
- search 將會替代 query屬性
- query (object類型; 詳細(xì)請看 querystring) 如果沒有 search,將會使用此屬性.
- search 無論前面是否有 ? (問號)欧聘,都會同樣的處理
- hash無論前面是否有# (井號, 錨點)片林,都會同樣處理
url.resolve(from, to)
給定一個基礎(chǔ)URL路徑,和一個href 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'