url
模組和querystring
模組是非常重要的兩個URL
處理模組。在做node
服務端的開發時會常用到。
在介紹url
模組之前我們先來一張圖,看懂了這張圖對於url
這個模組你就基本上沒什麼問題了。
我們來解釋下各自的意義
:
,並且是小寫的。 【相關教學推薦:nodejs影片教學、程式設計教學】:
後面跟了兩個//
,那麼為true。 usrname:passwd
,如果沒有,則為usrname
。注意,這裡區分大小寫。 ke.qq.com:8080
,並且是小寫的。 ?
,此外,值是沒有經過decode的。 search
去掉?
,其餘一樣;如果是對象,那麼是decode過的。
#。 protocol
、host
會被轉成小寫字母。 #下面我們來講解下它的三個常用方法
#該方法將會url
字串,解析成object
,方便開發者進行操作。
const url = require("url"); const str = "http://user:password@randy.com:8080/index.html?nick=%E4%B8%AD%E6%96%87#part=1"; const obj = url.parse(str); console.log(obj);
輸出
該方法也支援傳遞另外兩個參數,parseQueryString
和slashesDenoteHos
parseQueryString:(預設為false)如為false
,則urlObject.query
為未解析的字串,例如nick=中文
,且對應的值不會decode
;如果parseQueryString
為true,則urlObject.query
為object
,且值會被`decode;
const url = require("url"); const str = "http://user:password@randy.com:8080/index.html?nick=%E4%B8%AD%E6%96%87#part=1"; const obj2 = url.parse(str, true); console.log(obj2);
slashesDenoteHos
:(預設為false)如果為true
,那麼類似//randy/nick
裡的randy
就會被認為是hostname
;如果為 false
,則randy
被認為是
的一部份。
光看起來可能不太懂這句話的意思,下面筆者舉個例子我相信你們就明白了。
const str2 = "//randy/nick"; const obj3 = url.parse(str2, true, false); console.log(obj3); const obj4 = url.parse(str2, true, true); console.log(obj4);
#這個方法就是
parse
的反向運算。將物件轉成
const pathObj = { protocol: "http:", slashes: true, auth: "user:password", host: "randy.com:8080", port: "8080", hostname: "randy.com", hash: "#part=1", search: "?nick=%E4%B8%AD%E6%96%87", query: "nick=%E4%B8%AD%E6%96%87", pathname: "/index.html", path: "/index.html?nick=%E4%B8%AD%E6%96%87", href: "http://user:password@randy.com:8080/index.html?nick=%E4%B8%AD%E6%96%87#part=1", }; console.log(url.format(pathObj)); // http://user:password@randy.com:8080/index.html?nick=%E4%B8%AD%E6%96%87#part=1
此方法用於解析相對於基本
URL
的目標
console.log(url.resolve("/one/two/three", "four")); // /one/two/four console.log(url.resolve("http://example.com/", "/one")); // http://example.com/one console.log(url.resolve("http://example.com/one", "/two")); // http://example.com/two console.log(url.resolve("http://example.com/one/ddd/ddd/ddd", "./two")); // http://example.com/one/ddd/ddd/two console.log(url.resolve("http://example.com/one/ddd/ddd/ddd", "../two")); // http://example.com/one/ddd/two console.log(url.resolve("http://example.com/one/ddd/ddd/ddd", ".../two")); // http://example.com/one/ddd/ddd/.../two
querystring
這個模組,也是用來做url
查詢參數的解析。這裡我們重點分析下它的parse
和
#parse
是將查詢字串轉換成物件類型,也會
。 <pre class="brush:js;toolbar:false;">const querystring = require(&quot;querystring&quot;);
const str = &quot;nick=randy&amp;age=24&amp;nick2=%E4%B8%AD%E6%96%87&quot;;
const obj = querystring.parse(str);
console.log(obj); // { nick: &amp;#39;randy&amp;#39;, age: &amp;#39;24&amp;#39;, nick2: &amp;#39;中文&amp;#39; }</pre>
下面我們再來看看它的第二個和第三個參數。其實相當於可以替換
為自訂字符,下面筆者舉個例子就很快明白了。 <pre class="brush:js;toolbar:false;">const str1 = &quot;name-randy|country-cn&quot;;
const obj1 = querystring.parse(str1);
console.log(obj1); // { &amp;#39;name-randy|country-cn&amp;#39;: &amp;#39;&amp;#39; }
const obj2 = querystring.parse(str1, &quot;|&quot;, &quot;-&quot;);
console.log(obj2); // { name: &amp;#39;randy&amp;#39;, country: &amp;#39;cn&amp;#39; }</pre>
相當於把&
替換成|
,把=
取代了
這個方法就是上面
的反向運算。下面咱們直接上例子
const obj3 = { nick: "randy", age: "24", }; const str4 = querystring.stringify(obj3); console.log(str4); // nick=randy&age=24###這個方法也是支援自訂分割符的。 ###
const obj5 = { name: "randy", country: "cn", }; const str6 = querystring.stringify(obj5, "|", "-"); console.log(str6); // name-randy|country-c
更多node相关知识,请访问:nodejs 教程!
以上是聊聊Node中的url模組和querystring模組的詳細內容。更多資訊請關注PHP中文網其他相關文章!