Node.js 核心模块 笔记

全局对象

JavaScript 中有一个特殊的对象,成为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量。
浏览器JavaScript 中,通常window 是全局对象,而Node.js 中的全局对象是global,所有全局变量(除了global 本身以外)都是global 对象的属性。
global 最根本的作用是作为全局变量的宿主。按照ECMAScript 的定义,满足以下条件的变量是全局变量:
在最外层定义的变量;全局对象的属性;隐式定义的变量(未定义直接赋值的变量)
注:Node.js 中不可以在最外层定义变量,因为所有用户代码都属于当前模块的,而模块本身不是最外层上下文。

process 是一个全局变量,即global 对象的属性。它用于描述当前Node.js 进程状态的对象,提供了一个与操作系统的简单接口。
process.argv 是命令行参数数组,第一个元素是node,第二个元素是脚本文件名,从第三个元素开始每个元素是一个运行参数。
process.stdout 是标准输出流,通常使用console.log() 向标准输出打印字符,而process.stdout.write() 函数提供了更底层的接口。
process.stdin 是标准输入流,初始时它是被暂停的,要想从标准输入读取数据,必须恢复流,并手动编写流的事件响应函数。
**process.nextTick(callback) 功能是为事件循环设置一项任务,Node.js 会在下次事件循环响应时调用callback。

console 用于提供控制台标准输出,它是由Internet Explorer 的JScript 引擎提供的调试工具,后来组建成为浏览器事实标准。Node.js 沿用了这个标准,用于向标准输出流(stdout)或标准错误流(stderr)输出字符。

常用工具util

util 是一个Node.js 核心模块,提供常用的函数的集合,用于弥补核心JavaScript 的功能过于精简的不足。
util.inherits
util.inherits(constructor, superConstructor) 是一个实现对象间原型继承的函数。
注:仅继承原型中定义的函数,而构造函数内部创造的属性不会继承
util.inspect
util.inspect(object, [showHidden],[depth],[colors]) 将任何对象转换为字符窜的方法,通常用于调试和错误的输出。它至少接受一个参数object,即要转换的对象。

事件驱动events

events 是Node.js 最重要的模块,原因是Node.js 本身架构就是事件式的,而它提供了唯一的接口,所以堪称Node.js 事件编程的基石。

事件发射器
events 模块只提供一个对象:events.EventEmitter。
EventEmitter 的核心是事件发射与事件监听器功能的封装。每个事件由一个事件名和若干个参数组成。
EventEmitter.on(event, listener) 为指定事件注册一个监听器,接受一个字符串event 和一个回调函数listener。
EventEmitter.emit(event, [arg1], [arg2], […]) 发射event 事件,传递若干可选参数到事件监听器的参数表。
EventEmitter.once(event, listener) 为指定事件注册一个单次监听器,即监听器最多只会触发一次,触发之后立刻解除该监听器。
EventEmitter.removeListener(event, listener) 移除指定事件的某个监听器,listener 必须是该事件已经注册过的监听器。
EventEmitter.removeAllListener([event]) 移除所有事件的所有监听器,如果指定event,则移除指定事件所有监听器。

error 事件
EventEmitter 定义了一个特殊的事件error,当遇到异常时通常会发射error 事件。
当error 被发射时,EventEmitter 规定如果没有响应的监听器,Node.js 会把它当作异常,退出程序并打印调用栈。
注:一般要为会发射error 事件的对象设置监听器,避免遇到错误整个程序崩溃

继承EventEmitter
只要支持事件响应的核心模块都是EventEmitter 的子类。包括fs、net、http 在内的,只要是支持相应的核心模块都是EventEmitter 的子类。

文件系统fs

fs 模块是文件操作的封装,它提供了文件的读取、写入、更名、删除、便利目录、链接等POSIX 文件系统操作。
注:POSIX 表示可移植操作系统接口,POSIX 标准定义了操作系统应用程序提供的接口标准。

fs.readFile(异步)
fs.readFIle(filename, [encoding], [callback(err, data)])

fs.readFileSync(同步)
fs.readFileSync(filename, [encoding])

fs.open
fs.open(path, flags, [mode], [callback(err, fd)]) 是POSIX open 函数的封装,path 为文件的路径,flags 可以是一下值。
r:以读取模式打开文件。 r+:以读写模式打开文件
w:以写入模式打开文件,如果文件不存在则创建。
w+:以读写模式打开文件,如果文件不存在则创建。
a: 以追加模式打开文件,如果文件不存在则创建。
a+:以读取追加模式打开文件,如果文件不存在则创建。

fs.read
fs.read(fd, buffer, offset, length, position, [callback(err, bytesRead, buffer)]) 是POSIX read 函数的封装,相比fs.readFile 提供了更底层的接口。

HTTP 服务器与客户端

Node.js 标准库提供了http 模块,其中封装了一个高效的HTTP 服务器和一个简易的HTTP 客户端。
HTTP 服务器
http.Server 是一个基于事件的HTTP 服务器,它的核心由Node.js 下层C++ 部分实现,而接口由JavaScript 封装,兼顾了高性能与简易性。
http.Server 是http 模块中的HTTP 服务器对象,用于Node.js 做的所有基于HTTP协议的系统。它提供了一套封装级别很低的API,仅仅是控制和简单的消息解析,所有的高层功能都要通过它的接口来实现。

var http = require('http');

http.createServer(function(req,res){
    res.writeHead(200, {'Content-Type':'text/html'});
    res.write('<h1>Node.js</h1>');
    res.end('<p>Hello World</p>');
}).listen(3000);

console.log('HTTP server is listening at port 3000.');

http.createServer 创建了一个http.Server 的实例,将一个函数作为HTTP 请求处理函数。

猜你喜欢

转载自blog.csdn.net/yana_loo/article/details/79207194
今日推荐