前端开发已经非常依赖node,无论是构建时使用的webpack,roolup 还是创建项目时用的vue-clie, vite, create-react-app,或者跨域时使用的反向代理服务都是用node开发实现。但是node的官方api多达**[TODO]**个(截止到2020.07.18 使用无头浏览器爬虫获取结果),让人不知道从哪学起。
为了快速学习上手node,我整理了node常用的api,并通过一些例子来巩固理解。熟练掌握这些api后,再次阅读webpack,vue-cli, koa等源码就再也不怕啦。
模块系统
首先,我们要清楚 node内的模块分三种,核心模块,文件模块,第三方模块。其中文件模块是node内置的库,不需要require引入即可使用,如果了解了commonJs的实现,就能够很清楚的知道为什么如此。
文件模块:nodejs注入到环境中的模块,直接使用,不用通过require引入
核心模块:本文总结的都是内置模块的api。
第三方模块:npm上发布的第三方库文件,这种模块不在本文范围内。
process
- process.argv(commnder)
- process.env(需注意cross-env mac和windows不一样)
- process.cwd() 当前工作目录
- process.nextTick
- process.platform
buffer
- Buffer.isBuffer 判断是否是Buffer
- Buffer.slice
- 创建buffer 并指定大小 Buffer.alloc(5)
- 字符串转buffer Buffer.from(str)
- 判断是否是buffer Buffer.isBuffer
- Buffer.concat
- Buffer.copy
- Buffer.toString() buffer 转字符串
event
node中的事件模块,当其他模块要用到发布订阅模式时,要继承此模块。如我们常用的http-server工具就使用了event模块。
- on
- emit
- on('new Listener')
- once
- delete
此处我实现了一个nodejs中event,可以通过这个demo来加深对于node中event模块的理解。
path 路径
- path.join
- path.resolve
- path.extname
stream
对于node中的流操作常出现在文件的读写以及http操作。因为http中的request和response是可读流和可写流。
-
可读流 (基于文件, 有data 和 end说明是可读流) on(‘data’) on(‘end’) on(‘error’) on(‘close’) on(‘open’) pause resume
-
读取流: on(‘data) on(‘end’)
-
写入流: .write() .end()
-
rs.pipe()
fs
- 创建文件夹:fs.mkdirSync
- 删除文件夹: fs.rmdirSync
- 创建文件: fs.writeFile
- 删除文件: fs.unlinkSync
- 修改文件名称: fs.
- 文件是否存在: fs.exitsSync
- 文件是否可被访问: fs.access
- 查看子目录: fs.readdirSync(path)
- 是否是文件夹:
let statObj = fs.statSync
statObj.isDirectory() //是否是文件夹
statObj.isFile() //是否是文件
- fs.readFile 同步读文件
- fs.readFileSync 异步读文件
- fs.createReadStream 文件可读流
- fs.createWriteStream 文件可写流
- pipe 管道
举个例子:下面这个例子通过流的方式压缩test.txt文件
fs.createReadStream('./test.txt')
.pipe(zlib.createGzip())
.pipe(fs.createWriteStream('test.gz'))
单独看这些api有些枯燥,这里通过一个小例子来加深印象,——[demo] node删除文件夹。此demo只要用commander封装一下,就能够成为一个命令行管理文件目录工具。此工具可查看——[] 还是挺有意思的。 此处准备封装一个类似Tree的工具
http
node原生提供的http模块。下面总结为node起服务三步走:
let server = http.createServer() // 1. new server实例
server.on('request', function(req, res) { // 2. 监听请求,给请求返回响应
res.end(‘ok’)
}
server.listen(3000, function() { // 3. 起服务
console.log('server start ' + port)
})
注意:
- 请求头request是一个可读流
- 响应头response是一个可写流
所以可以通过流的方式获取请求内容,可以通过流的方式写入响应
demo 实现一个http-server
zlib 文件压缩模块
- createGzip
crypto 摘要算法
- createHash
参考: node.js中文网
希望这篇文章能给你一些帮助,欢迎和作者联系讨论相关内容。