nodeJS的REPL(read eval print loop 交互式解释器):表示一个电脑的环境,node自带了交互式解释器,可以执行以下任务:
1.读取:读取用户输入,解析输入了js数据结构并存储在内存中
2.执行:执行输入的数据结构
3.打印:输出结果
4.循环:循环1-3直到按下ctrl-c
(node中的解释器可以很好的调试js)
REPL的使用:
1.使用变量:变量声明var关键字,若没有var关键字会直接打印出来,使用var关键字的变量可以使用console.log()输出
2.多行表达式:node REPL支持输入多行表达式(例如do while循环)
3.下划线(_)变量:可使用下划线获取表达式的运算结果
nodeJS回调函数:nodeJS异步编程的直接结果就是回调,异步编程依托于回调来实现,但是不能说使用了回调就是异步了
var fs = require("fs");
fs.readFile('input.txt',function(err,data){
if(err){
console.error(err);
}
console.log(data.toString());
})
nodeJS事件循环
1.node是单进程应用程序,但是通过事件和回调支持并发
2.node的每一个api都是异步的,并作为一个独立线程运行,使用异步函数调用并处理并发
3.node基本上所有的事件和机制都用设计模式中的观察者模式实现
4.node单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者
5.node使用事件驱动模型,当web server接收到请求,就把它关闭,然后去服务下一个web请求
node的内置事件,引入events模块,通过实例化eventEmitter类来绑定和监听事件:
var event = requrie("event");
var eventEmitter = new event.eventEmitter()
eventEmitter.on("事件名",function);
eventEmitter.emit("事件名");
EventEmitter类:触发事件和事件监听功能的封装
方法:addListener(event,listener)
on(event,listener)
once(event,listener)
removeListener(event,listener)
removeAllListener(event,listener)
setMaxListenner(event,listener)
listeners(event)
emit(event,[arg,],[arg2,],...]
ListenerCount(emitter,event)
继承EventEmitter:大多数不会直接使用该类,而是在对象中继承它
nodeJS的Buffer(缓存区):该类用来创建一个专门存放二进制数据的缓存区(因为js没有二进制数据类型)
1.创建Buffer类:方法一:var buf = new Buffer(10)//创建长度为10字节的Buffer实例
方法二:var buf = new Buffer([10,20,30,40,50])//创建Buffer实例
方法三:var buf = new Buffer("www.run.com")//通过字符串来创建实例
2.写入缓存区:buf.write(string[,offset[,length]][,encoding]);//参数值分别为写入缓存区的字符串,缓存区开始写入的索引值,写入字节数默认为buffer.length, 编码方式默认utf8
3.从缓存区读取数据:buf.write([encoding][,start,[,end]]);//参数值分别为 编码方式,指定开始读取的索引,结束位置(默认缓冲区末尾)
4.将Buffer转换为JSon对象:buf.toJSON()
5.缓存区合并:Buffer.concat(list[,totallength])//参数的值分别为:用于合并的Buffer对象数组列表,指定合并后Buffer对象的总长
6.缓存区比较:buf.compare(otherBuffer)
7.拷贝缓存区:buf.copy(targetBuffer[,targetstart[,sourcestart[,sourceend]]])
8.缓存区裁剪:buf.slice([start[,end]]);//返回一个新的缓存区