配色: 字号:
第十四课 URL和QuryString
2020-12-22 | 阅:  转:  |  分享 
  
教师:王晓玲QQ:4260924邮箱:4260924@qq.comNo
de.js开发主要内容URL的结构图WHATWGAPI的常用属性和方法URLSearchParams的使用Node中
的URL一个URL字符串是一个结构化的字符串,它包含多个有意义的组成部分。当被解析时,会返回一个URL对象,它包含每个
组成部分作为属性。url模块提供了两套API来处理URLs:一个是Node.js遗留的特有的API,另一个则是通常使用在web浏
览器中实现了WHATWGURLStandard的API.请注意:虽然Node.js遗留的特有的API并没有被弃用,但是保
留的目的是用于向后兼容已有应用程序。因此新的应用程序请使用WHATWGAPI。WHATWG与Node.js遗留的特有的API的
比较如下。网址''http://user:pass@sub.host.com:8080/p/a/t/h?query=string#h
ash''上方是由遗留的url.parse()返回的对象属性。网址下方的则是由WHATWGURL对象的属性。URL结构图WH
ATWGURL的origin属性包括protocol和host,但不包含username、password。URL解析
1、利用WHATWGAPI解析一个URL字符串:const{URL}=require(''url'');const
myURL=newURL(''https://user:pass@sub.host.com:8080/p/a/t/h?query
=string#hash'');2、使用遗留的API解析URL字符串:consturl=require(''ur
l'');constmyURL=url.parse(''https://user:pass@sub.host.com:8080
/p/a/t/h?query=string#hash'');WHATWGURLAPIConstructor:newU
RL(input[,base])input要解析的输入URLbase|
如果“input”是相对URL,则为要解析的基本URL。通过将input解析到base上创建一个新的URL对象。const{
URL}=require(''url'');constmyURL=newURL(''/foo'',''https://e
xample.org/'');//https://example.org/foo如果input或base是无效URLs,将
会抛出TypeError。例如:const{URL}=require(''url'');constmyURL=ne
wURL({toString:()=>''https://example.org/''});//https://ex
ample.org/存在于input主机名中的Unicode字符将被使用Punycode算法自动转换为ASCII。const
{URL}=require(''url'');constmyURL=newURL(''https://你好你好'');
//https://xn--6qqa088eba/url.hash属性获取及设置URL的分段(hash
)部分。const{URL}=require(''url'');constmyURL=newURL(''https
://example.org/foo#bar'');console.log(myURL.hash);//输出#barm
yURL.hash=''baz'';console.log(myURL.href);//输出https://examp
le.org/foo#baz包含在赋给hash属性的值中的无效URL字符是[百分比编码][]。注意选择哪些字符进行百分比编码可能
与[url.parse()][]和[url.format()][]方法产生的不同。url.host属性获取
及设置URL的主机(host)部分。const{URL}=require(''url'');constmyURL=
newURL(''https://example.org:81/foo'');console.log(myURL.host);
//输出example.org:81myURL.host=''example.com:82'';console.log(
myURL.href);//输出https://example.com:82/foo如果给host属性设置的值是无效值
,那么该值将被忽略。url.hostname属性获取及设置URL的主机名(hostname)部分。ur
l.host和url.hostname之间的区别是url.hostname不包含端口。const{URL}=requ
ire(''url'');constmyURL=newURL(''https://example.org:81/foo'');
console.log(myURL.hostname);//输出example.orgmyURL.hostname=
''example.com:82'';console.log(myURL.href);//输出https://examp
le.com:81/foo如果给hostname属性设置的值是无效值,那么该值将被忽略。url.href属性g>获取及设置序列化的URL。const{URL}=require(''url'');constmyURL=ne
wURL(''https://example.org/foo'');console.log(myURL.href);//输
出https://example.org/foomyURL.href=''https://example.com/bar'';
console.log(myURL.href);//输出https://example.com/bar获取href属
性的值等同于调用url.toString()。将此属性的值设置为新值等同于newURL(value)使用创建新的URL对象。U
RL对象的每个属性都将被修改。如果给href属性设置的值是无效URL,将会抛出TypeError。URL的其它属性序号
属性&描述1url.origin获取只读序列化的URLorigin部分2url.password获取及设置URL的
密码(password)部分3url.pathname获取及设置URL的路径(path)部分4url.port获取及设
置URL的端口(port)部分端口值可以被设置为数字或包含数字的字符串,数字范围0~65535(包括)。5url.protoc
ol获取及设置URL的协议(protocol)部分。6url.search获取及设置URL的序列化查询(query)部分部
分。7url.username获取及设置URL的用户名(username)部分。url.toJSON()方法返回:tring>在URL对象上调用toJSON()方法将返回序列化的URL。返回值与url.href和url.toString()的
相同。当URL对象使用JSON.stringify()序列化时将自动调用该方法。const{URL}=require
(''url'');constmyURLs=[newURL(''https://www.example.com''),
newURL(''https://test.example.org'')];console.log(JSON.stringif
y(myURLs));//输出["https://www.example.com/","https://test.exa
mple.org/"]url.format方法url.format(URL[,options])参数:URL
一个WHATWGURL对象optionsauth如果序列化的URL字符串应该包含用
户名和密码为true,否则为false。默认为true。fragment如果序列化的URL字符串应该包含分
段为true,否则为false。默认为true。search如果序列化的URL字符串应该包含搜索查询为tr
ue,否则为false。默认为true。unicodetrue如果出现在URL字符串主机元素里的Unic
ode字符应该被直接编码而不是使用Punycode编码为true,默认为false。返回:返回一个WHATWGURL对象的可
自定义序列化的URL字符串表达。虽然URL对象的toString()方法和href属性都可以返回URL的序列化的字符串。然而,两
者都不可以被自定义。而url.format(URL[,options])方法允许输出的基本自定义。url.parse方法ur
l.parse(urlString[,parseQueryString[,slashesDenoteHost]])urlSt
ring要解析的URL字符串。parseQueryString如果为true,则
query属性总会通过querystring模块的parse()方法生成一个对象。如果为false,则返回的UR
L对象上的query属性会是一个未解析、未解码的字符串。默认为false。slashesDenoteHostlean>如果为true,则//之后至下一个/之前的字符串会被解析作为host。例如,//foo/bar会被解析
为{host:''foo'',pathname:''/bar''}而不是{pathname:''//foo/bar''}。默认
为false。url.parse()方法会解析一个URL字符串并返回一个URL对象。如果urlString不是
字符串将会抛出TypeError。如果auth属性存在但无法编码则抛出URIError。url.resolve方法u
rl.resolve(from,to)from解析时相对的基本URL。to要解析的
超链接URL。url.resolve()方法会以一种Web浏览器解析超链接的方式把一个目标URL解析成相对于一个基础
URL。例子:consturl=require(''url'');url.resolve(''/one/two/thr
ee'',''four'');//''/one/two/four''url.resolve(''http://exam
ple.com/'',''/one'');//''http://example.com/one''url.resolve(''h
ttp://example.com/one'',''/two'');//''http://example.com/two''C
lass:URLSearchParamsURLSearchParamsAPI接口提供对URLquery部分的读写权限。URLS
earchParams类也能够与以下四个构造函数中的任意一个单独使用。WHATWGURLSearchParams接口和quer
ystring模块有相似的目的,但是querystring模块的目的更加通用,因为它可以定制分隔符(&和=)。但另一方面,这个AP
I是专门为URL查询字符串而设计的。newURLSearchParams(string)string
个查询字符串将string解析成一个查询字符串,并且使用它来实例化一个新的URLSearchParams对象.如果strin
g以''?''打头,则''?''将会被忽略.const{URLSearchParams}=require(''url'');letparams;params=newURLSearchParams(''user=abc&query=xyz'');console.log(params.get(''user''));//输出''abc''console.log(params.toString());//输出''user=abc&query=xyz''params=newURLSearchParams(''?user=abc&query=xyz'');console.log(params.toString());//输出''user=abc&query=xyz''
献花(0)
+1
(本文系中转站199首藏)