原创大约 14 分钟
事件循环
官网简化图
┌───────────────────────────┐
┌─>│ timers │
│ └─────────────┬─────────────┘
│ ┌─────────────┴─────────────┐
│ │ pending callbacks │
│ └─────────────┬─────────────┘
│ ┌─────────────┴─────────────┐
│ │ idle, prepare │
│ └─────────────┬─────────────┘ ┌───────────────┐
│ ┌─────────────┴─────────────┐ │ incoming: │
│ │ poll │<─────┤ connections, │
│ └─────────────┬─────────────┘ │ data, etc. │
│ ┌─────────────┴─────────────┐ └───────────────┘
│ │ check │
│ └─────────────┬─────────────┘
│ ┌─────────────┴─────────────┐
└──┤ close callbacks │
└───────────────────────────┘
原创小于 1 分钟
文件模块
node引入模块三个步骤:
- 路径解析
- 文件定位
- 编译执行
例如require('element') 时,在node_modules中找到的是个文件夹,node会将目录当一个包来处理。
(查找的兜底是index文件名)
- 在当前目录下找到package.json
- 通过JSON.parse()解析出包描述对象,从中取出main属性制定的文件名
异步I/O
系统的异步io
原创小于 1 分钟
原文链接https://zhuanlan.zhihu.com/p/137535779
package
包含了package.json,使用package.json定义的一个package。通常是对应一个module,也可以不包含module。
module
能被require的,就是一个module,只有当module里面包含package.json的时候,它才叫package。
原创大约 6 分钟
fs模块是唯一一个同时提供同步和异步API的模块
- fs.readdirSync(__dirname) 同步读取一个文件
- fs.readdir('.',function(err, files){}) 异步读取文件
Stream
流,比起使用fs.readFile和rs.writeFile方法对文件进行读写操作,
使用Stream API来进行读写操作可以避免想上面的方法一样需要一次分配内存来进行操作,stream可以分段处理,这样在读取大文件或者上传大文件时有足够的操作空间。
原创小于 1 分钟
connect
对node http模块的封装,能更简洁更方便的调用功能
express
对connect的封装,基于更上层的调用
原创小于 1 分钟
commonJS规范
模块
一个文件为一个模块,对模块的定义分为: 模块引用,模块定义,模块标识三个部分
模块引用
const chenjian = require(./chenjian.js)
模块定义
上下文提供了export对象来导出模块,在模块中还存在一个module对象,它代表模块自身,所以export是
module的属性。
export.say = function (){alert('hellow, i am good man')}
原创大约 2 分钟