NodeJS学习之模块和交互式环境下的使用

同于namespace命名空间,JS为了避免团队代码中的变量和函数相互污染,引入了Common.js规范,这个规范类似于PHP中的PSR约定,同时它也主要针对模块和组件开发。

主要包括模块的定义,标识和引用三个部分。

  • nodejs中文件和模块和对应的,模块主要有核心模块,文件模块第三发模块,它们分别的引用模块方式为:
1
2
3
4
5
核心模块: http fs path
文件模块: var util=require('./util.js')
第三方模块: var promise=require('bluebird')
  • 核心模块在node环境启动时被加载,第三方模块包括npm下载和团队自定义的模块。

  • 模块流程: 创建模块,导出模块,加载模块,使用模块, 示例创建一个school模块。

  • 关于exports和module.exports。

  • URI和URL的区别(统一资源标识符和统一资源定位符),URL属于URI,我们常说的网址就是URL,但是URI是一个略微抽象的概念,URL的命名规则包括协议,英文,小写,文中编码等等。node也有一个用于网址解析的url模块。

  • 在node命令环境中输入url就能看到这个模块暴露的方法,使用url.pasre('http://www.imooc.com/course/list')就能被模块解析成一个对象返回到终端。其组成部分包括:

1
2
3
4
5
6
7
8
9
10
11
12
protocol 底层使用的协议
slashes 是否有双斜线
auth 是否有认证
host 域名或ip地址
port 端口
hostname 主机名
hash 哈希值
search 查询参数
query 发送的数据
pathname 资源路径名
path 资源路径
href 完整超链接
  • url.parse和url.format是可逆的操作。

  • 输入querystring查看这个模块提供的方法。其中有querystring.stringify({name: 'scote', sex: '男'})可以把对象序列化后变成URL参数路径。更多参数查看文档。

  • querystring.stringifyquerystring.parse是互逆的,后者是反序列化操作, 类似于json_encodejson_decode。就是字符串和对象之间的互相转换。更多参数请查阅API文档。

  • 汉字转义使用querystring.escape(), 反转义使用querystring.unescape()

  • 输入网址按下回车后发生了什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1. 搜索浏览器自身的DNS缓存
2. 搜索操作系统自身的DNS缓存
3. 读取本地hosts文件
4. 向本地DNS服务商发起一个系统调用
5. 该服务商查看自身的DNS缓存记录和数据库
true- 该服务商向根DNS服务器发起迭代DNS解析请求
true- 该服务商拿到ip地址后返回系统内核并把记录缓存
true- 操作系统内核把结果返回给浏览器
5. 得到ip后开始三次握手四次挥手,建立TCP/IP连接
true- 217.123.43.62的哥们,你在线吗?(0-1)
true- 我在。(1-2)
true- 我要给你发送数据了,准备好了吗?(2-3)
true- 准备好了。(3-4)
6. 连接建立成功后客户端发送HTTP方法。
7. 服务器端接收到请求,后端处理后把数据返回给浏览器。
8. 服务器上的静态资源也经过上面的步骤返回到浏览器
9. 浏览器把拿到的资源组合渲染给用户看
  • 请求和响应都会发送http header和http body(正文信息)。

坚持原创技术分享,您的支持将鼓励我继续创作!
0%