node常用api总结

2,198 阅读3分钟

前端开发已经非常依赖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)
})

注意:

  1. 请求头request是一个可读流
  2. 响应头response是一个可写流

所以可以通过流的方式获取请求内容,可以通过流的方式写入响应


demo 实现一个http-server

zlib 文件压缩模块

  • createGzip

crypto 摘要算法

  • createHash

参考: node.js中文网

希望这篇文章能给你一些帮助,欢迎和作者联系讨论相关内容。