node自学之HTTP 模块、URL 模块、supervisor 工具
终极目标:掌握和使用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 参数来接收和响应数据。
在终端运行程序:
cd到文件目录,然后node 文件名 运行,接着用浏览器点开响应链接观察结果。
浏览器结果:
响应了正确的文字,和H2标题,请求了两个文件,响应中地址和状态码信息都符合我们的设置。
小结:也就是说,我们本地写一个js,打死都不能直接拖入浏览器运行,但是有了node,我们任何一个js 文件,都可以通过node 来运行。也就是说,node 就是一个js 的执行环境。
此外,来看一下req 里面能够使用的东西。最关键的就是req.url 属性,表示用户的请求URL 地址。所有的路由设计,都是通过req.url来实现的。
我们比较关心的不是拿到URL,而是识别这个URL。这个时候可以使用url模块。
url模块
使用url模块时,先require引入,然后使用url.parse() 解析URL
输出一个url对象
让我们向解析url的query时,parse()方法里面,设置第二个参数为true:
url的其他方法:
url.format(urlObject) //是上面url.parse() 操作的逆向操作
url.resolve(from, to) 添加或者替换地址
http模块与url模型的结合使用
通常,浏览器(客户端)输入的url会带有一些查询(参数)。
这个时候,服务器可能需要知道,甚至解析这个ur。这个时候就使用到req对象了。
http的req对象其实里面有很多属性(即存在很多信息)
其中,有个属性是url,获取浏览器访问的地址
结果:
浏览器也确实反映了需要这两个文件:
相当于服务器获取到了这两个请求,但实际上可能我们需要的是第一个请求,并且解析它(让这个请求解析为一个对象)并做一些处理:
结果:(每次结果要记得现在保存修改,结束服务器控制台CTRL+C,然后重新运行文件,刷新浏览器,才可以观察结果)
小结:这样就可以获取url的get传值。
Nodejs 自启动工具supervisor
之前的调试,可以发现,当修改js文件时,需要保存,结束服务器控制台CTRL+C,然后重新运行文件,刷新浏览器,才可以观察结果。
supervisor 会不停的watch 你应用下面的所有文件,发现有文件被修改,就重新载入程序文件这样就实现了部署,修改了程序文件后马上就能看到变更后的结果。
supervisor也是node内置的一个模块,使用它时,首先全局安装:
然后,使用supervisor 关键词代替node 命令启动应用:
举例1:
例如,一开始浏览器请求为:
回车后,服务器控制台输出:
当修改浏览器请求时:
回车后,结果改为:
举例2:
当修改服务器文件时:(加多一个name字段)
保存文件,此时服务器控制台,重启:
浏览器点开页面(刷新),一样可以获取相关信息:
小结:这样调试就比之前的要方便很多了。
其他补充:
当然,如果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