nodeJS---URL相關模塊用法(url和querystring)


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&param=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&param=that',
  query: 'with=query&param=that',
  pathname: '/some/url/',
  path: '/some/url/?with=query&param=that',
  href: 'http://www.nodejs.org/some/url/?with=query&param=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&param=that',
  query: 'with=query&param=that',
  pathname: '/some/url/',
  path: '/some/url/?with=query&param=that',
  href: 'http://www.nodejs.org/some/url/?with=query&param=that#about'
};
console.log(url.format(urlObj));

最后輸出:http://www.nodejs.org/some/url/?with=query&param=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&param=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&param=that',
  query: 'with=query&param=that',
  pathname: '/some/url/',
  path: '/some/url/?with=query&param=that',
  href: 'http://www.nodejs.org/some/url/?with=query&param=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&param=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=男


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM