nodejs系列:2.url模块的介绍和使用-上篇

447 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

系列介绍

该系列主要是介绍一些nodejs相关的基础知识,没有什么特别难的知识点,都是一些比较基础知识点。大家学习起来,也会比较容易理解和接收。

这些知识点,也是以前自己学习nodejs的时候,学习过的知识点。有些知识点,可能是由于学习的时间比较久了,也有可能是平时工作中用到的机会比较少,也差不多快把它们都忘记掉了。现在把它们都写下来,写成文章,一方面是记录下自己以前学习的nodejs知识点,一方面也是复习巩固自己以前学习的nodejs知识点。不要学着学着,就把以前的知识点都忘光了。

nodejs介绍

nodejs摘抄过来的node介绍:

Node.js 是一个开源和跨平台的 JavaScript 运行时环境。 它几乎是任何类型项目的流行工具!

Node.js 在浏览器之外运行 V8 JavaScript 引擎(Google Chrome 的内核)。 这使得 Node.js 的性能非常好。

Node.js 应用程序在单个进程中运行,无需为每个请求创建新的线程。 Node.js 在其标准库中提供了一组异步的 I/O 原语,以防止 JavaScript 代码阻塞,通常,Node.js 中的库是使用非阻塞范式编写的,使得阻塞行为成为异常而不是常态。

当 Node.js 执行 I/O 操作时(比如从网络读取、访问数据库或文件系统),Node.js 将在响应返回时恢复操作(而不是阻塞线程和浪费 CPU 周期等待)。

这允许 Node.js 使用单个服务器处理数千个并发连接,而不会引入管理线程并发(这可能是错误的重要来源)的负担。

Node.js 具有独特的优势,因为数百万为浏览器编写 JavaScript 的前端开发者现在无需学习完全不同的语言,就可以编写除客户端代码之外的服务器端代码。

在 Node.js 中,可以毫无问题地使用新的 ECMAScript 标准,因为你不必等待所有用户更新他们的浏览器,你负责通过更改 Node.js 版本来决定使用哪个 ECMAScript 版本,你还可以通过运行带有标志的 Node.js 来启用特定的实验性功能。

我们可以从介绍里面看到,nodejs还是挺棒的。

nodejs遵循的是commomjs规范,所以使用nodejs的时候,需要按照commomjs规范来编写代码。

环境安装

实现之前,你先需要安装nodejs环境。因为我们写的代码需要在node环境上运行,如果你没有,那么文件会运行不了。

以下是nodejs的安装地址,如果你没有安装的话,可以先把它安装上。安装了可以忽略这一步,跳到下面一步。

nodejs安装

介绍

node的内置模块,url模块,主要是用来处理和解析url地址的。

比如,如果你想要拿到get请求传递过来的参数,就可以使用url模块来解析url,从而拿到get请求传递参数,下面将会介绍怎么使用。

使用

创建一个index.js文件,要使用url模块,直接在文件里引入即可。

const url = require('url')

url模块有3个方法,下面分别介绍一下。

parse

parse方法接受网址字符串,解析并返回网址对象。

使用parse方法,使用方式如下:


url.parse(urlString[,parseQueryString,[slashesDenoteHost]])

参数介绍:

  • urlString:要解析的url字符串

  • parseQueryString:布尔值,如果为true,则query属性将始终设置为querystring模块的parse()方法返回的对象。如果为false,则返回的网址对象上的query属性将是未解析、未编码的字符串

    默认值是:false

  • slashesDenoteHost:布尔值,如果为 true,则文字串 // 之后和下一个 / 之前的第一个令牌将被解释为 host

    默认值是:false

顺便说一下,传递的参数里面,中括号[]代表这个参数是可选,可以传递也可以不用传递。

接下来分别一一使用各个参数,看下各个参数起到什么作用。

我们先定义一个url地址


let urlStr = 'http://hao123.com/user?id=1&name=tony'

接着我们调用url模块的parse方法,把url给解析一下。


console.log('url',url.parse(req.url));

在cmd里用node重新运行文件(因为每次改动一下,都要用node重新运行js文件,才可以看到更新的内容)

查看打印信息:

0002.png

我们可以看到,调用parse方法后,把url字符串,解析成了一个url对象了。

跳过其它属性,我们直接看query这个属性。这个属性是存放我们get请求传递的参数的。

0003.png

不过现在它还是一个字符串,如果它是一个对象,那我们拿get请求的参数就会更方便一点。那怎么才可以使得query的值是一个对象呢?

上面我们说过,parse的第二个参数控制是否请求的参数转换一个对象。

我们在parse方法的第二个参数传递一个true即可。


console.log('url',url.parse(req.url,true));

在cmd里,用node重新运行一下,查看打印信息。

0004.png

这时我们再看query属性,它就变成了一个对象了。我们从对象里面拿值,就非常方便了。

url.parse()方法的第三个参数,是用来解析主机地址的。也就是当我们不知道url协议时,以//为依据识别host。

先定义一个带协议的url地址


const urlStr = 'http://hao123.com/'

调用url.parse方法,解析一下这个url地址,并且把结果在cmd里打印出来


console.log('url',url.parse(urlStr));

在cmd里,用node运行这个js文件

0005.png

我们可以看到,这个url的host被解析出来了,解析为hao123.com

0006.png

接着我们把前面的协议去掉,


const urlStr = '//hao123.com/'

在cmd里,用node运行这个js文件,看下打印结果

0007.png

我们可以看到,去掉协议地址后,host解析不出来了,值为null。

这时,我们把parse方法的第三个参数改为true

console.log('url',url.parse(urlStr,false,true));

在cmd里,用node运行这个js文件,看下打印结果

0008.png

这时我们可以看到,url的host地址又被解析出来。

这是因为parse的第三个参数,如果设置为true,当我们的url地址的协议地址未知时,会把url里//后面的路径解析为host地址

小结

url.parse()方法有3个参数:

  • 第一个参数:要解析的url
  • 第二个参数:是否把url上传递的参数解析为对象
  • 第三个参数:url的协议地址未知时,是否把url里//后面的路径解析为host地址

由于篇幅有限,在上篇先介绍parse方法。在下篇,再介绍url模块的其它方法

最后,放上自己比较喜欢的一句诗句:

千淘万漉虽辛苦,吹尽狂沙始到金 - 唐 刘禹锡《浪淘沙》