1、node回调函数:
node使用回调函数,实现异步编程,达到非阻塞流程。
node是单线程,但所有api都是异步,实现并发
node基本所有的事件机制都是观察者模式
2、node事件驱动程序
我的理解:node将所有的请求或事件等io操作都丢进eventloop里,然后由eventloop循环检测达到触发条件的回调函数并执行。
3、eventEmitter
//event.js 文件var EventEmitter = require('events').EventEmitter; var event = new EventEmitter(); event.on('some_event', function() { console.log('some_event 事件触发'); }); setTimeout(function() { event.emit('some_event'); }, 1000);
eventEmitter的api:
addListner(event,listener):给事件添加监听器到尾部
emit(event):触发事件
on(event,listener):给事件注册监听器
once(event,listener):给事件注册一次性监听器
removeListener(event,listener):给事件删除监听器,此处的监听器必须为实名函数
removeAllListener(event):移除所有监听器
setMaxListeners(n):设置最大的监听器数量
4、Buffer
node的一个类,用于创建存放二进制数据的缓存区
类似于一个整数数组,但是是对应于v8堆内存之外的的一个原始内存
buffer和string之间转换(读取缓冲区数据)通过toString方式,默认编码为utf-8
5、Stream流
node的抽象接口
四种类型:
-
Readable:用来读取数据,比如
fs.createReadStream()
。 -
Writable:用来写数据,比如
fs.createWriteStream()
。 -
Duplex:可读+可写,比如
net.Socket()
。 -
Transform:在读写的过程中,可以对数据进行修改,比如
zlib.createDeflate()
(数据压缩/解压)。
stream为eventEmitter的实现;有以下几个事件
-
data - 当有数据可读时触发。
-
end - 没有更多的数据可读时触发。
-
error - 在接收和写入过程中发生错误时触发。
-
finish - 所有数据已被写入到底层系统时触发。
6、node模块系统:
require,查找的顺序为:文件模块缓存区--》原生模块--》文件
7、文件系统:
var fs = require("fs");
读写文件、打开关闭删除文件等等操作
8、node工具模块:
OS模块:系统相关操作模块
系统内存、操作系统名、返回主机名等。。。
path模块:处理文件路径模块
格式化路径、连接路径、转换绝对路径、读取文件后缀名等。。。
Net模块:用于底层的网络通信小工具
创建tcp或本地服务器等。。
dns模块:用于解析域名
domain模块:简化异步代码异常处理,捕捉try catch无法捕捉的错误
9、web模块:
10、express框架:
利用中间件来响应http请求
定义路由响应不同http请求
向模板传递动态参数渲染页面,如ejs模板
常用的模块:
body-parser:用于处理json等编码数据
cookie-parser:用于处理cookie,可通过req.cookies获取传递给服务器的cookie对象
multer:用于处理enctype='multipart/form-data'(设置表单MIME编码)的表单数据
app.user(express.static("public")):设置静态文件