分类 标签 存档 社区 博客 友链 GitHub 订阅 搜索

Nodejs 入门

193 浏览




     本文主要是作为自己系统地整理 nodejs 入门知识点,以弥补自身之前对 nodejs 相关项目开发只能模仿而不能自主开发或者创造的巨大技术缺陷!

环境工具

  • nvm : nodejs 版本管理工具
  • npm : nodejs 包管理工具
  • nrm : npm registry 管理工具

基本概念

  • 异步:nodejs 是一种依托于回调实现的异步编程,回调函数一般作为执行异步操作函数的最后一个参数出现(异步 async ~ 非阻塞,同步 sync ~ 阻塞),并且回调函数接收错误对象作为第一个参数
  • 事件驱动机制:nodejs 采用 “观察者模式 + 异步回调” 的事件驱动模型,解决 nodejs 单进程单线程应用的并发性能问题;如,可使用 events 模块的 EventEmitter 类来绑定和监听事件
  • 模块系统:在 nodejs 中,一个模块 = 一个文件,该文件可以是 js 代码、json 文件或编译过的 c/c++ 扩展;模块系统使得 nodejs 文件可以相互调用,模块是 nodejs 应用的基本组成部分
  • 函数:在 js 中,一个函数可以作为另一个函数的参数;匿名函数,即将一个函数作为变量传递,不需要遵循 “先定义,再传递”,直接在接收参数的地方定义函数且可以不用给函数起名字,因此称之为匿名函数,例如 http.createServer() 方法的参数使用是传递了一个匿名函数
  • 路由:url 模块 + querystring 模块,以实现路由并解析 URL 地址
  • 全局对象:全局变量即为全局对象的属性(注意:永远使用 var 定义变量以避免引入全局变量)

常见类

  • EventEmitter

events 模块仅提供一个对象 events.EventEmitter,该对象核心就是事件触发 (emit - 触发一个事件) 与事件监听器 (on - 绑定事件函数) 功能的封装

EventEmitter 的每个事件 = 唯一的事件名 + 若干个事件监听器,,注册到这个事件(即事件名相同的事件为同一个事件)的事件监听器会被依次调用

一个事件 即 为一个事件名称固定的即为一个事件

error 事件:一般要为会触发 error 事件的对象设置监听器,避免遇到错误后整个程序崩溃

继承 EventEmitter :一般不会直接使用 EventEmitter,而是在对象中去继承它,如 fs\http\net 等模块,只要是支持响应事件的核心模块都是 EventEmitter 的子类

  • Buffer

js 语言中只有字符串数据类型,没有二进制数据类型;但对于处理向 TCP 流或文件流时,必须使用到二进制数据,因此在 nodejs 中定义了 Buffer 类用以创建一个专门存放二进制数据的缓存区

Buffer.from(‘aokaytech’,‘ascii’);// 用于表示编码字符的序列,如 UTF-8,UCS2,Base64、十六进制编码

  • Stream

nodejs 中 Stream 有四种流类型:Readable 可读操作、Writable 可写操作、Duplex 可读可写操作、Transform 操作被写入数据然后读出结果

所有 Stream 对象均是 EventEmitter 的实例,常用事件有:data 有数据可读时触发、end 没有更多数据可读时触发、error 在接收和写入过程中发生错误时触发、finish 所有数据已被写入到底层系统时触发

常用的流操作:从流中读取数据、写入流、管道流、链式流

nodejs 模块

  • 模块:

nodejs 提供了 exports(是模块公开的接口)和 require(用于从外部获取一个模块的接口,即所获取模块的 exports 对象;./ 表示当前目录,nodejs 默认文件后缀为 js)两个对象,其中 exports 或者以 exports.xxx = …… 形式定义模块公开接口,或者 module.exports = Xxx 形式定义对象本身即在外部引用该模块时输出为对象本身而不是原先的 exports

模块加载流程(也即,require 方法的文件查找策略):nodejs 中有 4 类模块(原生模块 + 3 种文件模块):从文件模块缓存中加载、从原生模块加载、从文件加载

加载流程如下图: image.png

require 支持以下四种参数:

http、fs、path 等原生模块;

./mod 或../mod,相对路径的文件模块

/pathtomodule/mod,绝对路径的文件模块

mod,非原生模块的文件模块

  • http 模块
createServer(function(req,res){}).listen(8888);
  • fs 模块
readFileSync('file.txt');

readFile('file.txt',function(err,data){});

  • events 模块
//EventEmitter类
eventEmitter.on('eventName',eventHandler);  //绑定事件及事件处理程序,等同于addListener方法
eventEmitter.emit('eventName');//触发eventName事件监听器

eventEmitter.emit('error');//触发error事件监听器:若事件队列中出现一个未绑定事件则触发error事件,若未绑定 error事件则程序抛出异常结束执行

listenerCount();//等价于eventEmitter.listeners('connection').length
once();
……
  • url 模块

  • querystring 模块

  • util 模块

util.inherits(constructor, superConstructor); //实现对象间原型继承的函数
util.inspect(object,[showHidden],[depth],[colors]);//将任意对象转换为字符串,常用于调试和错误输出
util.isArray(object);//判断是否数组
util.isRegExp(object);//判断是否正则表达式
util.isDate(object);//判断是否日期
util.isError(object);//判断是否错误对象
  • os 模块
  • path 模块
  • net 模块
  • dns 模块
  • domain 模块

扩展

  • global 对象

__filename : 当前正在执行的脚本的文件名(含路径) __dirname : 当前正在执行的脚本所在目录 setTimeout(cb,ms):在指定的毫秒 ms 后执行一次指定函数 cb,返回一个代表定时器的句柄 setInterval(cb,ms):在指定的毫秒 ms 后重复多次执行指定函数 cb,返回一个代表定时器的句柄;直至 clearInterval(t) 函数被调用清除定时器 clearTimeout(t):停止一个之前 setTimeout 创建过的定时器 t

console:提供控制台标准输出,log\info\error\warn\dir\time\timeEnd\trace\assert

process:描述当前 nodejs 进程状态的对象,exit\beforeExit\uncaughtException\Signal

  • nodejs 多进程
  • nodejs 连 mysql
  • nodejs 连 mongodb




评论  
留下你的脚步
推荐阅读