终极目标:掌握和使用node

本博客目的:记录node学习的进度和心得(HTTP 模块、URL 模块、
supervisor 工具)

内容:HTTP 模块、URL 模块、supervisor 工具。

HTTP 模块、URL 模块、supervisor 工具

Node.js 中,将很多的功能,划分为了一个个module(模块)。Node.js 中的很多功能都是通过模块实现。

http模块

​ 如果我们使用PHP 来编写后端的代码时,需要Apache 或者Nginx 的HTTP 服务器,来处理客户端的请求相应。

​ 不过对Node.js 来说,概念完全不一样了。使用Node.js 时,我们不仅仅在实现一个应用,同时还实现了整个HTTP 服务器。

​ http模块在node已经内置好了,可以直接require引用。

var http = require("http");

创建服务器

​ 使用http.createServer() 方法创建服务器,并使用listen 方法绑定8888 端口(通常端口设置大于3000,避免端口冲突)。函数通过request, response 参数来接收和响应数据。

image-20200508164008971

在终端运行程序:

​ cd到文件目录,然后node 文件名 运行,接着用浏览器点开响应链接观察结果。

image-20200508164355806

浏览器结果:

​ 响应了正确的文字,和H2标题,请求了两个文件,响应中地址和状态码信息都符合我们的设置。

image-20200508164037143

image-20200508164118199

小结:也就是说,我们本地写一个js,打死都不能直接拖入浏览器运行,但是有了node,我们任何一个js 文件,都可以通过node 来运行。也就是说,node 就是一个js 的执行环境。

​ 此外,来看一下req 里面能够使用的东西。最关键的就是req.url 属性,表示用户的请求URL 地址。所有的路由设计,都是通过req.url来实现的。
​ 我们比较关心的不是拿到URL,而是识别这个URL。这个时候可以使用url模块。

url模块

​ 使用url模块时,先require引入,然后使用url.parse() 解析URL

image-20200508165756612

输出一个url对象

image-20200508165814675

让我们向解析url的query时,parse()方法里面,设置第二个参数为true:

image-20200508165927433

image-20200508165951426

url的其他方法

url.format(urlObject) //是上面url.parse() 操作的逆向操作
url.resolve(from, to) 添加或者替换地址

http模块与url模型的结合使用

通常,浏览器(客户端)输入的url会带有一些查询(参数)。

image-20200508171358359

这个时候,服务器可能需要知道,甚至解析这个ur。这个时候就使用到req对象了。

http的req对象其实里面有很多属性(即存在很多信息)

image-20200508170530432

image-20200508170622481

其中,有个属性是url,获取浏览器访问的地址

image-20200508171509440

结果:

image-20200508171500542

浏览器也确实反映了需要这两个文件:

image-20200508171735535

相当于服务器获取到了这两个请求,但实际上可能我们需要的是第一个请求,并且解析它(让这个请求解析为一个对象)并做一些处理:

image-20200508172135269

image-20200508172205135

结果:(每次结果要记得现在保存修改,结束服务器控制台CTRL+C,然后重新运行文件,刷新浏览器,才可以观察结果)

image-20200508172221383

小结:这样就可以获取url的get传值。

Nodejs 自启动工具supervisor

​ 之前的调试,可以发现,当修改js文件时,需要保存,结束服务器控制台CTRL+C,然后重新运行文件,刷新浏览器,才可以观察结果。

​ supervisor 会不停的watch 你应用下面的所有文件,发现有文件被修改,就重新载入程序文件这样就实现了部署,修改了程序文件后马上就能看到变更后的结果。

​ supervisor也是node内置的一个模块,使用它时,首先全局安装:

image-20200508172945630

​ 然后,使用supervisor 关键词代替node 命令启动应用:

image-20200508173410091

​ 举例1:

​ 例如,一开始浏览器请求为:

image-20200508173347708

​ 回车后,服务器控制台输出:

image-20200508173503610

​ 当修改浏览器请求时:

image-20200508173523515

​ 回车后,结果改为:

image-20200508173543026

​ 举例2:

​ 当修改服务器文件时:(加多一个name字段)

image-20200508173719962

​ 保存文件,此时服务器控制台,重启:

image-20200508173819570

​ 浏览器点开页面(刷新),一样可以获取相关信息:

image-20200508173846747

小结:这样调试就比之前的要方便很多了。

其他补充:

当然,如果npm安装比较慢,也可以修改npm为cnpm,使用淘宝的镜像文件来安装。

安装cnpm (推荐)

http://npm.taobao.org/

npm install -g cnpm --registry=https://registry.npm.taobao.org

然后 cnpm -g install supervisor

运行代码:supervisor app.js