URL路由
URL:Uniform Resource Locator。统一资源定位器。还有一个就是URI(统一资源标识符),其中的I是指identifier。URL是基于URI的。在互联网中,任何一个资源(html、css、js、img、动画、视频、音频、word)需要保证它的唯一性。可以给每一个资源指定一个唯一的URL。简单来说,URL就是我们常说的网址。
在web当中,用户输入不同的URL,服务器就接收到这个信息,需要处理这个信息,根据不同的请求,返回相应的内容。这个过程就是URL路由。我们可以通过req对象(IncomingMessage对象)中的url属性,来获取相关的信息,并进行处理。
Node.js提供了一个url模块,可以解析url,得到更为详细的信息。url.parse(url)得到一个对象,里边包含整个url中的各种信息。
代码片段:
浏览器输入 localhost:3000/user?username=admin&pwd=123
路由处理 let realUrl = "http://"+ req.headers.host + req.url;
let urlObj = url.parse(realUrl);//得到查询字符串query : 'username=admin&pwd=123'
解析查询字符串
打开一个网页,很多情况下路径名不发生变化,改变查询字符串,就会显示不同内容;附加的一些信息,需要根据这些信息,显示不同的内容给用户。
格式:?键1=值1&键2=值2&键n=值n
使用url.parse方法解析url之后,可以拿到查询字符串
Node.js提供了querystring 模块,其中有 parse 方法,可以将字符串解析成对象;这样就可以直接通过属性来获取相对应的值。
- 我们前边已经学了通过request.url获取用户访问的url,进而编写路由代码,将用户需要的数据或者是文件发给用户。
- 前边我们使用的url都是只有文件路径,一般情况下,我们在请求服务器的时候,还会给服务器发送一些数据,这些数据会被配置在url的后边,就想这样:https://hao.360.cn/?src=lm&ls=n642410819f ,这代表访问服务器根目录,并给服务发送了两条数据(数据被加密了)—— src=lm ls=n642410819f。
- 我们现在写一个node服务器,用来输出用户访问的url。然后使用127.0.0.1:8888/?name=sc&age=18来访问这个服务器。我们会得到
- 而我们编写的路由时只需要用文件路径部分“/”,用户发过来的数据(name=sc&age=18)还有其他作用,这时我们就需要对用户请求url进行处理,也就是查分成不用的部分。
- 一个较完整的url——
{协议}://{用户名}:{密码}@{主机名}:{端口号}/{路径}/{文件}?{参数}
2.当然我们的重点是研究我们需要的部分(端口以后的部分),然后了解端口之前部分(node服务器无法获得这部分url)
3.要想完成拆解url的目的,我们需要学习另外两个模块 url模块、querystring模块
Url模块 :拆分url
Querystring :将参数转化为对象(使用url拆解后得到的参数部分还不能直接使用,需要转换为对象,才能使用。)
Url模块
- 因为在服务器中使用request.url()的方式无法获得完整的url,所以我们需要自定义一个url做我们的小白鼠。
- url.URL 获得一个构造方法,用来构造url对象
- url.parse() 将字符串形式的url转化为对象
- Url.format() 将对象形式的url转化为字符串
- 补充一点:我们通过request.url()获得的是字符串形式的url
- 一个url对象包含如下属性:http://127.0.0.1:8888?name=sc&age=18’
- url对象的属性详解
- 我们需要也必须掌握的属性只有两个 pathname与search(因为request.url与path作用一致)