# 阻塞和非阻塞
阻塞 做不完不许回来
var fs = require('fs');
var data = fs.readFileSync('data.txt');
console.log(data.toString());
2
3
4
5
非阻塞 你先做着,做完了告诉我一声我再来
var fs = require('fs');
var data = fs.readFile('data.txt',function(err,data) {
if(err) return new Error(err);
console.log(data.toString());//(2)
});
console.log('同步任务执行完毕!');//(1)
2
3
4
5
6
7
8
# 事件驱动
# 事件驱动模型(非阻塞性IO)
主循环 Event Loop 检测堆积在Events里的事件,执行完一个把下一个塞入{Event Handlers}里执行!
# 事件处理代码流程
1、引入events对象,创建eventEmitter对象。 2、绑定事件处理程序 3、触发事件
//1、引入events对象,创建eventEmitter对象。
var events = require('events');
var eventEmitter = new events.EventEmitter();
//2、绑定事件处理程序
var connectHandler = function() {
console.log('Hello world!');
}
eventEmitter.on('test',connectHandler);
//3、触发事件
eventEmitter.emit('test');
console.log('server end!');
2
3
4
5
6
7
8
9
10
11
# node 模块化
# node 模块
# node 路由
index.html
var server = require('./http');
var router = require("./router");
server.start(router.route)
2
3
4
http.js
var http = require("http");
var url = require("url");
function start(route) {
function onRequest(request, response) {
var pathname = url.parse(request.url).pathname;
route(pathname,response);
}
http.createServer(onRequest).listen(3000);
console.log("Server has started.");
}
exports.start = start;
2
3
4
5
6
7
8
9
10
11
12
13
14
router.js
function route(pathname, response) {
if(pathname == '/') {
response.writeHead(200, { "Content-Type": "text/plain" });
response.write("Hello World");
response.end();
}else{
response.end('other');
}
}
exports.route = route;
2
3
4
5
6
7
8
9
10
11
# node 全局对象
1、__filename //具体到文件路径 2、__dirname //文件所在路径 3、process 它用于描述当前Node.js 进程状态的对象,提供了一个与操作系统的简单接口。 exit 当进程准备退出时触发。 beforeExit 当 node 清空事件循环,并且没有其他安排时触发这个事件。通常来说,当没有进程安排时 node 退出,但是 'beforeExit' 的监听器可以异步调用,这样 node 就会继续执行。 uncaughtException 当一个异常冒泡回到事件循环,触发这个事件。如果给异常添加了监视器,默认的操作(打印堆栈跟踪信息并退出)就不会发生。
# node 常用工具
util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScript 的功能 过于精简的不足。
# node 文件系统
1、打开文件
fs.open(path, flags[, mode], callback)
2、获取文件信息
fs.stat(path, callback)
3、写入文件
fs.writeFile(file, data[, options], callback)
4、读取文件
fs.read(fd, buffer, offset, length, position, callback)
5、关闭文件
fs.close(fd, callback)
6、截取文件
fs.ftruncate(fd, len, callback)
7、删除文件
fs.unlink(path, callback)
8、创建目录
fs.mkdir(path[, options], callback)
9、读取目录
fs.readdir(path, callback)
10、删除目录
fs.rmdir(path, callback)