1、什么是Node.js
- 本质是JavaScript的解析器;
- 是JavaScript的运行环境;
- 是服务器程序;
- 使用是V8引擎;
- 不是Web服务器。
2、为什么使用Node.js
- 提供高性能的Web服务;
- IO性能强大;
- 事件处理机制完善;
- 天然能够处理DOM;
- 社区非常活跃,生态圈日趋完善。
3、Node.js优势
- 处理大流量数据;
- 适合实时交互应用;
- 完美支持对象数据库;
- 异步处理大量并发链接。
4、函数调用
- 函数调用方式分为三类:同步调用、回调和异步调用;
- 回调是一种双向调用模式:回调函数也可以调用主函数;
- 通过回调函数来实现回调。
5、阻塞与非阻塞
- 阻塞和非阻塞关注的是等待调用结果(消息、返回值)时的状态;
- 阻塞就是做不完不准回来;
- 非阻塞就是你先做,我现看看还有没有其他事,完了告诉我一声。
5.1、阻塞式代码
> var fs = require('fs'); //引用Node.js的FileStream类库
> var data = fs.readFileSync('data.txt'); //使用同步读取方法,读取文件
> console.log(data.toString());
5.2、非阻塞代码
> var fs = require('fs'); //引用Node.js的FileStream类库
> fs.readFile('data.txt', function(err, data){
if(err){
return console.log(err);
}
console.log(data.toString());
}); //使用同步读取方法,读取文件
> console.log('程序执行完毕!');
6、事件驱动
6.1、事件处理代码流程
- 引入events对象,创建eventEmitter对象;
- 绑定事件处理程序;
- 触发事件。
//第一步:
> var events = require('events');
> var eventEmitter = new events.EventEmitter();
//第二步:
> var connectHandler = function connected(){
console.log('connected被调用!');
}
> eventEmitter.on('connection', connectHandler());
//第三步:
> eventEmitter.emit('connection');
> console.log('程序执行完毕!');
7、模块化
- 为了让Node.js文件可以相互调用,Node.js提供一个简单的模块系统;
- 模块是Node.js应用程序的基本组成部分;
- 文件和模块是一一对应的,一个Node.js文件就是一个模块;
- 这个文件可能是JavaScript代码、JSON或者编译过的C/C++扩展;
- Node.js中存在4类模块(原生模块、3种文件模块)。
7.1、模块加载方式
- 从文件模块缓存中加载;
- 从原生模块(先从原生模块缓存中加载)加载;
- 从文件加载。
>
8、函数
- 在JavaScript中,一个函数可以作为另一个函数的参数;
- 我们可以先定义一个函数,然后传递,也可以在传递参数的地方直接定义函数;
- Node.js中函数的使用与JavaScript类似。
> function say(word){
console.log(word);
}
> function execute(someFun, value){
someFun(value);
}
> execute(say, "Hello");