Node.js(二)
Node.js第二天
一、http模块介绍
1、服务器和客户端的概念回顾
客户端负责向服务器发送请求, 获取数据并进行使用;
服务器负责接收来自客户端的网络请求, 处理数据并进行返回
2、http 内置模块
提供了创建 Web 服务器和客户端的相关 API
3、使用 Node 创建服务器的优势
无需安装和配置复杂的后台环境, 只需要几行代码就可以开启一个服务器, 十分精巧
二、服务器相关概念
1、IP 地址
用来标识互联网上一台计算机的唯一地址编号, 只有访问正确的 IP 地址才能和计算机进行数据通信
2、IP 地址格式
采用 “点分十进制” 表示成 A.B.C.D 的形式, 就是用4个从0~255的数字,来表示一个IP地址, 比如:
我们在终端输入 ipconfig 可以查看本机的 IPv4 地址格式
3、了解 ping 命令
在终端执行 ping 域名, 可以获取当前域名的 IP 地址并测试出网络连接情况
三、域名和域名服务器
1、域名 和 IP地址
域名和 IP 地址是一一对应的关系, 它是 IP 地址字符型的表达, 这种映射关系被存放在一台 DNS 服务器上
2、DNS(Domain Name System)
专门用来管理互联网上域名和 IP 对应关系的公网服务器
3、本地计算机的 IP 和 域名
开发测试时, 本地计算机 IP 一般是 127.0.0.1, 对应的域名是 localhost, 没有使用区别
四、端口
1、端口的概念
IP 地址可以用来标识唯一的计算机地址, 但是计算机上运行的不同服务无法仅用 IP 来标识, 于是使用了
IP + 端口号的方式来区分不同的服务, 每个服务都对应着一个唯一的端口号
2、端口的作用
客户端发送的请求, 通过指定的端口号, 可以把请求交给对应的服务来进行处理
注意:
ULR 中的端口号如果是 80, 一般可以省略
五、创建服务器步骤
引入 http 模块
创建服务实例
绑定事件, 监听请求
监听端口, 启动服务
1 | |
六、请求对象和响应对象
Node 服务器接收到了客户端的请求, 就会调用给服务器绑定的 request 请求事件处理函数, 函数的第一个参数
是 Node 封装好的请求对象, 第二个参数是响应对象
1、requset 请求对象
提供了获取客户端相关的请求属性, 比如:
- req.url 请求的路径
- req.method 请求的方法
1 | |
2、response 响应对象
提供了服务器响应数据相关的方法, 比如:
- res.setHeader() 设置响应头
- res.end() 响应数据内容
1 | |
七、模块化
1、什么是模块化
把一个大的功能需求拆分成若干功能项的小模块, 每个模块可组合, 分解和更换, 这就是模块化思想
2、Node.js 中的模块化
把一个大的文件拆分成多个互相依赖的小文件, 每个文件就是一个模块
3、好处
- 提高复用性 2. 代码可维护 3. 可以按需加载
4、模块化规范
模块在进行拆分和组合时需要遵守的规则, 主要考虑以下两点:
如何把自身模块成员向外暴露
如何把其他模块进行引入
5、Node.js中的模块分类
内置模块 (由 Node.js 官方提供的, 例如 fs, path, http 等)
自定义模块 (自己创建的 js 文件)
第三方模块 (由第三方开发的模块, 使用前需要先下载)
6、加载模块
require() 方法
注意:
加载内置模块和第三方模块,都是直接传入模块名,加载自己的模块需要传入文件路径,并省略 .js 后缀
7、模块作用域
不同模块中定义的方法和变量,只能在当前模块内访问,这种模块级别的限制叫做模块作用域
其他作用域
局部作用域
全局作用域
块级作用域;使用let, const
8、module和exports
exports:{ } 默认为空对象
module 对象的作用
在每个模块中, module 这个内置的变量表示当前模块的引用
module.exports 对象作用
把模块中的成员导出给外部, 供外界进行加载和调用
exports 对象
exports 是 module.exports 的更简短的引用形式
注意:
(1) module.exports 的值就是当前模块最终导出的结果
(2) 可以通过 exports 访问和修改 module.exports 上的属性, 但不能通过赋值方式进行覆盖
1 | |
总结:
(1) 尽量避免 exports 对象重新赋值,添加一个导出成员 exports.xx=xx,
(2) 声明新对象,使用module.exports={ xxx };
八、CommonJS规范
Node.js 中的模块化遵循 CommonJS (cjs) 规范,它规定了模块的特性和依赖方式:
每个模块内部, module 变量代表当前模块
module 变量是一个对象, module.exports 属性是对外暴露的接口
加载某个模块, 就是加载该模块的 module.exports 属性, require() 是加载的方法
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!