nodejs学习笔记

1、异步式IO(非阻塞 I/O)与事件驱动

当线程遇到 I/O 操作时,不会以阻塞的方式等待 I/O 操作 的完成或数据的 返回,而只是将 I/O 请求发送给操作系统,继续执行下一条语句。当操作 系 统完成 I/O 操作时,以事件的形式通知执行 I/O 操作的线程,线程会在特 定时候处理这个 事件。为了处理异步 I/O,线程必须有事件循环,不断地检 查有没有未处理的事件,依次予 以处理。 

Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。在开 事件由 EventEmitter 对象提供。前面提到的 fs.readFile 和  http.createServer 的回 调函数都是通过 EventEmitter 来实现的。下面我们用 一个简单的例子说明 EventEmitter 的用法: 

//event.js  

var EventEmitter = require('events').EventEmitter; 

var event = new EventEmitter();  

event.on('some_event', function() { 

  console.log('some_event occured.'); 

});  

setTimeout(function() { 

  event.emit('some_event'); 

}, 1000); 

运行这段代码,1秒后控制台输出了 some_event occured.。其原理是 event  象 注册了事件 some_event 的一个监听器,然后我们通过 setTimeout  1000毫秒以后向 event 对象发送事件 some_event,此时会调用 some_event  的监听器。

 

2、Node.jsWindows的兼容性仍然不如 POSIX 操作系统,这一点在 npm  提供的第三方模块中体现得尤为突出。这主要是因为许多第三方的模块需 要编译原生的 C/C++ 代码,其中编译框架和系统调用很多都是以 Linux  范本的,与 Windows 不兼容。

 

3、使用 node 的 REPL 模式

REPL Read-eval-print loop),即输入—求值—输出循环。

运行无参数的 node 将会启动一个 JavaScript 的交互式 shell

 

4、Node.js 将“HTTP服务器”这一层抽离,直接面向浏览器用户

 

5、global--全局对象与全局变量

 

6、全局变量--processconsole

 

7、常用工具--util

Util.inherits()继承

Util.inspect()以字符串的形式输出

 

8、Events事件 模块只提供了一个对象: events.EventEmitterEventEmitter 的核心就  是事件发射与事件监听器功能的封装。EventEmitter 的每个事件由一个事件 名和若干个参 数组成,事件名是一个字符串,通常表达一定的语义。对于 每个事件,EventEmitter 支持 若干个事件监听器。当事件发射时,注册到这 个事件的事件监听器被依次调用,事件参数作 为回调函数参数传递。

注册事件--EventEmitterInstance.on(事件名,回调函数);

发射事件--EventEmitterInstance.emit(事件名,返回参数);

常用的事件方法如下:

8.1 EventEmitter.on(event, listener) 为指定事件注册一个监听器,接受一个字  符串 event 和一个回调函数 listener

8.2 EventEmitter.emit(event, [arg1], [arg2], [...]) 发射 event 事件,传 递若干 可选参数到事件监听器的参数表

8.3 EventEmitter.once(event, listener) 为指定事件注册一个单次监听器,即 监 听器最多只会触发一次,触发后立刻解除该监听器

8.4 EventEmitter.removeListener(event, listener) 移除指定事件的某个监听  器,listener 必须是该事件已经注册过的监听器

8.5 EventEmitter.removeAllListeners([event]) 移除所有事件的所有监听器,  如果指定 event,则移除指定事件的所有监听器

 

9、events里面的error事件

 

10、文件系统--fs

10.1 fs.readFile(filename,[encoding],[callback(err,data)])是最简单的读取 文件 的函数。它接受一个必选参数 filename,表示要读取的文件名。第二个参数  encoding 是可选的,表示文件的字符编码。callback 是回调函数,用于接收 文件的内容。如果不指 定 encoding,则 callback 就是第二个参数。回调函 数提供两个参数 err 和 dataerr 表 示有没有错误发生,data 是文件内容。 如果指定了 encodingdata 是一个解析后的字符 串,否则 data 将会是以  Buffer 形式表示的二进制数据

fs.readFileSync(filename, [encoding])是 fs.readFile 同步的版本

10.2 fs.open(path, flags, [mode], [callback(err, fd)])是 POSIX open 函数的 封 装,与 语言标准库中的 fopen 函数类似

10.3 fs.read(fd, buffer, offset, length, position, [callback(err, bytesRead, buffer)]) 是 POSIX read 函数的封装,相比 fs.readFile 提供了更底层的接口。 fs.read 的功能是从指定的文件描述符 fd 中读取数据并写入 buffer  向的缓冲区对象。offset 是 buffer 的写入偏移量。length 是要从文件中 读取的字节数。position 是文件读取的起始 位置,如果 position 的值为  null,则会从当前文件指针的位置读取。回调函数传递 bytesRead 和  buffer,分别表示读取的字节数和缓冲区对象

 

11、http模块

11.1 http.Server 的事件

11.2 http.ServerRequest

11.3 http.ServerResponse

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值