Nodejs核心模块

Nodejs核心模块

主要内容

  • 全局对象

  • 常用工具

  • 事件机制

  • 文件系统访问

  • HTTP服务器与客户端


一、全局对象

  • js中有一个特殊对象,全局对象,它及其所有属性都可以在程序任何地方访问,即全局变量

  • js中的,全局对象是window,而node.js中的全局对象是global,所有全局变量(除了global本身以外)都是global对象的属性

1、全局对象和全局变量
  • 满足以下条件的变量是全局变量
  • 在最外层定义的变量
  • 全局对象的属性
  • 隐式定义的变量(未定义直接赋值的变量)

    注意:永远使用var定义变量以避免引入全局变量,因为全局变量会污染命名空间,提高代码的耦合风险
    
2、process
1)介绍
  • process是一个全局变量,即global对象的属性
  • 用于描述当前node.js进行状态的对象
  • 提供一个与操作系统简单接口
2)常用成员方法:
  • process.argv是命令行参数数组,第一个元素是node,第二个元素是脚本文件名,从第三个元素开始没个元素是一个运行参数
  • process.stdout是标准输出流,通常我们使用的console.log()向标准输出打印字符,而process.stdout.write()函数提供了更底层的接口
  • process.stdin是标准输入流,初始时它被暂停的,要想从标准输入读取数据,必须恢复流,并手动编写流的事件响应函数
3、console

用于提供控制台标准输出

二、常用工具util

util是一个node.js核心模块,提供常用函数的集合,用于弥补核心js的功能过于精简不足

1、util.inherits

util.inherits(constructor, superConstructor) 是一个实现对象间原型继承的函数
js的面向对象特性是基于原型的,与常见的基于类的不同

2、util.inspect

util.inspect(object, [showHidden],[depth],[colors]) 将任意对象转换为字符串的方法,通常用于调试和错误输出

3、测试工具:util.isArray()、util.isRegExp()、util.isDate()、util.isError()

三、事件驱动events

  • events是node.js最重要的模块,没有之一,原因是node.js本身架构是事件式的,而它提供了唯一的接口
  • 不仅用于用户代码与node.js下层事件循环的交互,被几乎所有模块依赖
1、事件发射器
  • events模块只提供一个对象:events.EventEmitter
  • EventEmitter 核心:事件发射与事件监听器功能的封装
  • 事件发射时,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递
EventEmitter常用的API:
EventEmitter.on(event, listener)
EventEmitter.emit(event, [arg1], [arg2], [...]) 
EventEmitter.once(event, listener)
EventEmitter.removeListener(event, listener) 
EventEmitter.removeAllListeners([event])
2、error事件
  • EventEmitter 定 了一个特 的事件 error,它包 了 错误 的语 义,我们在遇到 异常的时 通常会发射 error 事件。
  • error 被发射时,EventEmitter 规定如果没有 应的 听器,Node.js 会 它 作异常, 出程序并打 调用 。
3、继承EventEmitter
大多数情况不会直接使用EventEmitter,而是在对象中继承它。包括fs、net、http在内,只有是支持事件响应的核心模块都是EventEmitter的子类

四、文件系统fs

- fs提供了文件操作封装,提供了文件的读取、写入、更名、删除、遍历目录、链接等posix文件系统操作
- 异步和同步操作
1、fs.readFile
  • fs.readFile(filename,[encoding],[callback(err,data)])是最简 的读取 文件的函数。
  • fs.readFileSync(filename, [encoding])是 fs.readFile 同步的版本
  • fs.open(path, flags, [mode], [callback(err, fd)])是 POSIX open 函数的封装
  • fs.read(fd, buffer, offset, length, position, [callback(err, bytesRead, buffer)])是 POSIX read 函数的 装

五、HTTP服务器与客户端

- node.js标准库提供了http模块,其中封装了一个高效http服务器和一个简易的http客户端
- http.Server是一个基于事件的HTTP服务器,它的核心由node.js下层c++部分实现,接口由js封装,兼顾了高性能与简易性
- http.request则是一个HTTP客户端工具,用于向HTTP服务器发起请求
1、HTTP服务器
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.");
1)http.Server 的 事件

http.Server 是一个基于事件的 HTTP 服务器,所有的请求都被 装为 的事件, 开发者只需要对它的事件编写 应函数 可实现 HTTP 服务器的所有功能。

2)http.ServerRequest
  • http.ServerRequest 是 HTTP 请求的
  • 它一版 由http.Server 的 request 事件发 ,作为第一个参数传递,通常简 request 或 req
  • HTTP 请求一 可以分为两部分: (Request Header)和 (Requset Body)。
  • Request Header:内容短可以在请求头解析完成后立即读取。而请求体可能 相对长 , 需要一定的时间传输
2.1) 因此 http.ServerRequest 提供三个事件控制请求体传输
  • data: 当请求体数据到来时,该事件触发
  • end: 当请求体数据传输完成时,该事件被触发,此后不会再有数据到来
  • close: 用户当前请求结束时,该事件被触发,不同于end,如果用户强制终止传输,也还是会调用close
3) 获取GET请求内容
  • 由于GET请求直接被嵌入再路径中,url是完成的请求路径,包括了?后面的部分,因此手动解析后面内容作为get请求的参数
  • Node.js 的 url 模块中的 parse 函数提供了这个功能
    • 通过 url.parse1, 始的 path 被解析为一个对象,其中 query 就是我们所 的 GET 请求的内容,而路 则是 pathname
4) 获取POST请求内容
  • 相比 GET 请求 所有的内容编码到访问路经中,POST 请求的内容全部都在请求体中
  • http.ServerRequest 并没有一个属性内容为请求体, 原因是等待请求体传输可能是一件耗时的工作, 如上传文件。
  • 而很多时 我们可能并不需要理会请求体的内容, 恶意的 POST 请求会大大消耗 服务器的资源。
  • 所以Node.js 认是不会解析请求体的, 你需要的时 , 需要手动来做
5) http.ServerResponse
  • http.ServerResponse 是 回给 客户端的 信息,决定了用 户最终能看到的结果
  • 它也是由 http.Server 的 request 事件发 的,作为第二个参数传递,一般简称为 response 或 res。
  • 三个重要成员函数:
    • response.writeHead(statusCode, [headers]) 向请求的客户端发送响应头
    • response.write(data, [encoding]) 向请求的客户端发送响应内容
    • response.end([data], [encoding]) 响应结束,告知客户端所有发送已经完成。当所有要返回的内容发送完毕时,该函数必须调用一次
2、HTTP客户端
http 模块提供了两个函数 http.request 和 http.get,功能是作为 客户端向 HTTP 服务器发起请求。
  • http.request(options, callback) 发 HTTP 请求
  • http.get(options, callback) 它是 http.request 的简化版, 一的区别在于http.get 自动将请求方法设为了 GET 请求,同时不需要 动调用 req.end()
1)http.ClientRequest

http.ClientRequest 是由 http.request 或 http.get 返回产生的对象,表示一个已经产生而且正在进行中的 HTTP 请求。

2) http.ClientResponse

http.ClientResponse 与 http.ServerRequest 相似,提供了三 个事件 data、end和 close,分别在数据到达、传输结束和 接结结束时触发,其中 data 事件传递一个参数 chunk,表示接 到的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值