# 阻塞和非阻塞

阻塞 做不完不许回来

var fs = require('fs');

var data = fs.readFileSync('data.txt');

console.log(data.toString());
1
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)
1
2
3
4
5
6
7
8

# 事件驱动

# 事件驱动模型(非阻塞性IO)

An image 主循环 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!');
1
2
3
4
5
6
7
8
9
10
11

# node 模块化

# node 模块

An image

# node 路由

index.html

var server = require('./http');
var router = require("./router");

server.start(router.route)
1
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;
1
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;
1
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)