nodeJS---URL相關模組用法(url和querystring)
一: URL模組:
URL模組用於解析和處理URL的字串,提供瞭如下三個方法:
1. parse 2. format 3. resolve
1.1 url.parse(urlString); 將url字串地址轉為一個物件。
如下程式碼:
const url = require('url'); const urlString = url.parse('http://www.nodejs.org/some/url/?with=query¶m=that#about'); console.log(urlString); 輸出如下: // 輸出: Url { protocol: 'http:', slashes: true, auth: null, host: 'www.nodejs.org', port: null, hostname: 'www.nodejs.org', hash: '#about', search: '?with=query¶m=that', query: 'with=query¶m=that', pathname: '/some/url/', path: '/some/url/?with=query¶m=that', href: 'http://www.nodejs.org/some/url/?with=query¶m=that#about' }
protocal: url協議
auth: 使用者認證
host: 主機
port: 埠
hostname: 主機名
hash: 片段部分,也就是URL#之後的部分
search: url中HTTP GET的資訊,包含了 ?
query: 和 search一樣,但是不包含 ?
pathname: 跟在host之後的整個檔案路徑。但是不包含 ? 及 ?之後的字串。
path: 和pathname一樣,但是包含 ? 及之後的字串,但是不包含hash
href: 原始的url
1.2 format方法。
format方法與parse方法相反,用於根據某個物件生成URL的字串。
比如如下程式碼:
const url = require('url'); var urlObj = { protocol: 'http:', slashes: true, auth: null, host: 'www.nodejs.org', port: null, hostname: 'www.nodejs.org', hash: '#about', search: '?with=query¶m=that', query: 'with=query¶m=that', pathname: '/some/url/', path: '/some/url/?with=query¶m=that', href: 'http://www.nodejs.org/some/url/?with=query¶m=that#about' }; console.log(url.format(urlObj));
最後輸出:http://www.nodejs.org/some/url/?with=query¶m=that#about
1.3 resolve方法
resolve(from, to) 方法用於拼接URL, 它根據相對URL拼接成新的URL;
如下程式碼:
const url = require('url'); var str1 = url.resolve('/one/two/three', 'four'); console.log(str1); // 輸出 /one/two/four const str2 = url.resolve('http://www.baidu.com', 'four'); console.log(str2); // 輸出 http://www.baidu.com/four const str3 = url.resolve('http://www.baidu.com/', '/four'); console.log(str3); // 輸出 http://www.baidu.com/four const str4 = url.resolve('http://www.baidu.com/one/', '/four'); console.log(str4); // 輸出 http://www.baidu.com/four
二: querystring模組
它用於解析與格式化url查詢字串。
它提供了四個方法,分別是:querystring.parse, querystring.stringify, querystring.escape和querystring.unescape;
2.1 querystring.parse(string, separator, eq, options);
該方法是將一個字串反序列化為一個物件。
string: 指需要反序列化的字串。
separator(可選): 指用於分割字串string的字元,預設為 &;
eq(可選): 指用於劃分鍵和值的字元和字串,預設值為 "=";
options(可選): 該引數是一個物件,裡面可設定 maxKeys 和 decodeURIComponent 這兩個屬性。
maxKeys: 傳入一個nmuber型別,指定解析鍵值對的最大值,預設值為1000, 如果設定為0,則取消解析的數量限制。
decodeURIComponent: 傳入一個function, 用於對含有特殊字元進行編碼。
如下程式碼:
const url = require('url'); const querystring = require('querystring'); const urlString = url.parse('http://www.nodejs.org/some/url/?with=query¶m=that#about'); console.log(urlString); /* { protocol: 'http:', slashes: true, auth: null, host: 'www.nodejs.org', port: null, hostname: 'www.nodejs.org', hash: '#about', search: '?with=query¶m=that', query: 'with=query¶m=that', pathname: '/some/url/', path: '/some/url/?with=query¶m=that', href: 'http://www.nodejs.org/some/url/?with=query¶m=that#about' } } */ const str = querystring.parse(urlString.query); console.log(str); /* 返回 { with: 'query', param: 'that' } */
// 如果是以井號隔開的話,那麼使用後面的引數
const char = "with=query#param=that";
// 輸出 { with: 'query', param: 'that' }
const str2 = querystring.parse(char, '#', null, {maxKeys: 2});
2.2 querystring.stringify(obj, separator, eq, options);
該方法是將一個物件序列化成一個字串。
引數:obj指需要序列化的物件;
separator(可選),用於連線鍵值對的字元或字串,預設為 &;
eq(可選),用於連線鍵和值的字元或字串,預設值為 "=";
options(可選),傳入一個物件,該物件設定 encodeURIComponent這個屬性;
encodeURIComponent:值的型別為function,可以將一個不安全的url字串轉換成百分比的形式,預設值為querystring.escape()。
如下程式碼:
const url = require('url'); const querystring = require('querystring'); // 如果是以井號隔開的話,那麼使用後面的引數 const char = "with=query#param=that"; const str2 = querystring.parse(char, '#', null, {maxKeys: 2}); // 輸出 { with: 'query', param: 'that' } const str3 = querystring.stringify(str2); console.log(str3); // 輸出 with=query¶m=that // 如下使用 * 號分割,使用$符號連結 const str4 = querystring.stringify({name: 'kongzhi', sex: [ 'man', 'women' ] }, "*", "$"); console.log(str4); // name$kongzhi*sex$man*sex$women
2.3 querystring.escape(str);
escape該方法可使傳入的字串進行編碼, 如下程式碼:
const url = require('url'); const querystring = require('querystring'); // 如果是以井號隔開的話,那麼使用後面的引數 const char = "name=空智&sex=男"; const res = querystring.escape(char); console.log(res); // 輸出 name%3D%E7%A9%BA%E6%99%BA%26sex%3D%E7%94%B7
2.4 querystring.unescape(str);
該方法是對 使用了 escape編碼的字元進行解碼;如下程式碼:
const url = require('url'); const querystring = require('querystring'); // 如果是以井號隔開的話,那麼使用後面的引數 const char = "name=空智&sex=男"; const res = querystring.escape(char); console.log(res); // 輸出 name%3D%E7%A9%BA%E6%99%BA%26sex%3D%E7%94%B7 const res2 = querystring.unescape(res); console.log(res2); // name=空智&sex=男