课程目标
1、了解Nodejs提供的数据类型 | 2、了解Nodejs提供的几个工具库 | 3、掌握Nodejs的文件系统能力 |
Nodejs架构
数据类型 | api | ||
Buffer |
创建一个专门存放二 进制数据的缓存区 |
处理像TCP流或文件流等流式数据(非一次加载完成的数据)时,必须使用到二进制数据 需要在 Node.js 中处理I/O操作中移动的数据时,就有可能使用 Buffer 库 原始数据存储在 Buffer 类的实例中,一个 Buffer 类似于一个整数数组, 但它对应于 V8 堆内存之外的一块原始内存 存储需要临时占用大量内存数据,内存中开辟的一片区域(buffer),用于存放二进制数据 流的生产者与消费者之间的速度通常是不一致的,因此需要缓存区buffer来暂存一些数据 buffer大小通过highWaterMark参数指定,默认情况下是16kb 流式数据会自动创建Buffer,手动创建Buffer许谨慎,坑:待学 |
Buffer.form(buffer|array|string)使用对外内存新增Buffer Buffer.from(arrayBuffer) 浅拷贝arrayBuffer,共享内存 Buffer.alloc(size) 分配制定大小的Buffer,默认填0,用UTF-8编码 Buffer.allocUnsafe(size) 分配一个未初始化的Buffer |
Stream |
抽象接口,有很多 对象实现了这个接口 |
解决生产者和消费者问题的一种方式,解决异步IO问题 Stream模块对于六的使用者而言无需关心 |
readble.pipe(writebleDest) 类型:Readable、Writable、Duplex、Transform 事件:data 、end、error 、finish |
event/EventEmitter |
事件触发与事件监 听器功能的封装 |
所有的异步 I/O 操作在完成时都会发送一个事件到事件队列 |
事件:emit、on、 |
Error |
错误类型 |
种类: 标准的js错误,比如:SyntaxError/ReferenceError 底层操作出发的系统错误,比如:文件读写 用户自定义错误 异常逻辑触发的AssertionError,通常来自Assert模块 |
错误冒泡和捕获: 所以通过Node.js或者js运行时抛出的异常都是Error实力 大多数的异步方法都接受一个callback函数, 该函数会接受一个Error对象传入作为第一个参数 |
URL |
请求 |
弃用urlObjects,改用WHATWG URL 使用URLSearchParams操作参数 |
url.parse(req.url).pathname queryString.parse(url.parse(req.url).query)['param2'] Object.formEntries(new URLSearchParams('foo=bar&baz=que')) |
global |
全局变量 |
看上去像是全局变量的存在,实际上仅存在于模块的作用域中 从js继承而来的全局变量 Node特有的全局变量 |
__dirname、__filename、export、module、require() console、timer全家桶、global(容器) Buffer、process、URL、WebAssembly |
Nodejs工具库
util | |
风格转换 |
promisify <=> callbackify、 extEncoder<=> TextDecoder |
调试工具 |
debugger、inspect、format、getSystemErrorName |
类型判断 |
types.isDate(value) |
assert |
内置断言库、需要配合测试框架使用,主动抛出AssertionError错误 assert(vale, msg)、match(string, reg) |
querystring |
官方提供的解析和格式化URL查询字符串的实用工具 |
Nodejs的文件操作能力
os模块 |
提供了与操作系统相关的实用方法和熟悉 通过兼容的方式调用不同平台的底层命令,形成系统快照 - cpus、platform、type、uptime、userInfo 定义操作系统级别的枚举常量 - 信号常量 SIG*、错误常量E*、windows特有WSA*、优先级PRIORITY_* |
fs模拟Linux环境,提供了用于与文件系统进行交互的API 所有的文件系统操作都具有同步和异步的形式 URI作为特殊的文件也可以被fs模块使用 操作文件夹 mkdir/rmdir 操作文件 chmod/open/read/write |