一個完整的URL字串中,從"?"(不包括?)到"#"(如果存在#)或到該URL字串結束(如果不存在#)的這一部分稱為查詢字串.
可以使用Query String模組中的parse方法將該字串轉換為一個物件,parse方法的使用方式如下所示:
querystring.parse(str,[sep],[eq],[options]);
str表示被轉換的查詢字串,
sep.字串中的分隔符號,預設是&
eq.該字串中的分配符,預設為=."="左邊是key,右邊是value
options:是一個物件,可以在該物件中使用一個整數值類型的maxKeys屬性來指定轉換後的物件中的屬性個數,如果將maxKeys屬性值設定為0.其效果等於不使用maxKeys屬性值
var querystring=require("querystring");
var str="username=guoyansi&age=40&sex=male";
var res=querystring.parse(str);
console.log("1:%j",res);//1:{"username":"guoyansi","age":"40","sex":"male"}
res=querystring.parse(str,"!");
console.log("2:%j",res);//2:{"username":"guoyansi&age=40&sex=male"}
res=querystring.parse(str,"&");
console.log("3:%j",res);//3:{"username":"guoyansi","age":"40","sex":"male"}
str="username=guoyansi!age=40!sex=male";
res=querystring.parse(str,"!");
console.log("4:%j",res);//4:{"username":"guoyansi","age":"40","sex":"male"}
res=querystring.parse(str,"!","=");
console.log("5:%j",res);//5:{"username":"guoyansi","age":"40","sex":"male"}
res=querystring.parse(str,"!",":");
console.log("6:%j",res);//6:{"username=guoyansi":"","age=40":"","sex=male":""}
res=querystring.parse(str,"!","=",{maxKeys:2});
console.log("7:%j",res);//7:{"username":"guoyansi","age":"40"}
stringify是將字串轉換成查詢字串的格式.
querystring.stringify(obj,[sep],[eq])
var querystring=require("querystring");
var res= querystring.stringify({"username":"guoyansi","age":"40","sex":"male"});
console.log(res);//username=guoyansi&age=40&sex=male
res=querystring.stringify({"username":"guoyansi","age":"40","sex":"male"},"!");
console.log(res);//username=guoyansi!age=40!sex=male
res=querystring.stringify({"username":"guoyansi","age":"40","sex":"male"},"&",":");
console.log(res);//username:guoyansi&age:40&sex:male
res=querystring.stringify({"username":"guoyansi","age":["40","24"]},"&","=");
console.log(res);//username=guoyansi&age=40&age=24
在url模組中,可以使用parse()方法將URL字串轉換為一個物件,根據URL字串中的不同內容,該物件可能具有的屬性及其意義如下.
href:被轉換的原URL字串.
protocol:客戶端發出請求時使用的協定.
slashes:在協定與路徑中間時候使用"//"分隔符號.
host:URL字串中的完整位址及連接埠號碼,該位址可能為IP位址,也可能為一個主機名稱.
auth:URL字串中的認證資訊部分.
hostname:URL字串中的完整位址,該位址可能為一個IP位址,也可能為一個主機名稱.
search:Url字串中的查詢字串,包含起始字元"?"
path:url字串中的路徑,包含查詢字串.
query:url字串中的查詢字串,不包含起始字元"?",或根據該查詢字串而轉換的物件(根據parse()方法所用參數而決定query屬性值);
hash:url字串中的雜湊字串,包含起始字元"#".
url.parse(urlstr,[parseQueryString]);
urlStr:是需要轉換的URL字串,
parseQueryString:是一個布林值,當參數為true時,內部使用querystring模組查詢字串轉換為一個物件,參數值為false時不執行該轉換操作,預設是false
{ protocol: 'http:',
slashes: true,
auth: 'user:pass',
host: 'host:8080',
port: '8080',
hostname: 'host',
hash: '#name1',
search: '?username=sisi&age=24&sex=male',
query: 'username=sisi&age=24&sex=male',
pathname: '/,com/users/user.php',
path: '/,com/users/user.php?username=sisi&age=24&sex=male',
href: 'http://user:pass@host:8080/,com/users/user.php?username=sisi&age=24&sex=male#name1' }
var url=require("url");
var str="
http://user:pass@host,com:8080/users/user.php?username=sisi&age=24&sex=male#name1";
var res=url.parse(str,true);
console.log(res);
{ protocol: 'http:',
slashes: true,
auth: 'user:pass',
host: 'host:8080',
port: '8080',
hostname: 'host',
hash: '#name1',
search: '?username=sisi&age=24&sex=male',
query: { username: 'sisi', age: '24', sex: 'male' },
pathname: '/,com/users/user.php',
path: '/,com/users/user.php?username=sisi&age=24&sex=male',
href: 'http://user:pass@host:8080/,com/users/user.php?username=sisi&age=24&sex=male#name1' }
第一個例子和第二個例子不同之處在於parse的第二個參數,導致了結果中的query的不同
可以將一個url轉換過的物件轉換成一個url字串.
var url=require("url");
var str="
http://user:pass@host,com:8080/users/user.php?username=sisi&age=24&sex=male#name1";
var res=url.parse(str,true);
console.log(url.format(res));
結果是:
http://user:pass@host:8080/,com/users/user.php?username=sisi&age=24&sex=male#name1
以上就是node中轉換URL字串與查詢字串的全部內容了,好好研究下,其實挺簡單的。