1、Nodejs基本认知 -> 高并发(异步I/O、非阻塞式I/O)、高性能(chrome v8引擎)、事件驱动单线程
(1).其是基于Chrome V8引擎的javaScript运行环境;//Chrome V8引擎是C++写的,Nodejs也是用C++写的,两者可完美契合,v8是市面上最好的引擎,这也是Nodejs高性能的原因;
(2).事件驱动、非阻塞式I/O模型,使其轻量又高效;//异步I/O,非阻塞I/O也称为non-block
(3).Node.js的包管理器npm,是全球最大的开源库生态系统;//node package manage(包管理器),其提供了很庞大的库,存储在自己的服务器中,所有开发者都可使用其下载对应的库 -> 可在官网查看每个库的详细介绍:https://www.npmjs.com/
- - - >>> 严格意义来说nodejs不是单线程,能做到大量异步怎么会是单线程,其给人感觉是单线程,但其有线程池,整个体系是多线程的,系统自动管理,开发者不用理会;(多线程有通信,死锁等系列问题)
2、API使用 -> nodejs的核心便是模块间的相互调用,模块可使用内置的也可自定义模块;其遵循CommonJS模块化规范;-> require();//引入内置模块以及npm下载的模块不用写路径,引入自定义模块必须写路径,后缀名可省略;
(1).nodejs下载(npm也会随同下载)
成功安装(2).运行js代码:两种方式都可“跑”起来,建议使用第二种方式,代码和终端分离;[终端是linux中的叫法,window中称为命令行] ->WebStorm中右键“run”也可跑起来
(3).Global全局对象 -> 等同于浏览器中的window对象,有些变量和方法可直接使用的原因是因为其挂载到了Global全局;
- - - >>> 特殊:
exports,module,require(),__filename,__dirname,;这五个变量可直接使用,看似是全局变量,实则并不是,它们作为形参存在于函数中; -> NodeJS的模块是运行在一个函数中的,函数名、实参都是系统操作的,但可以确定该函数必然存在;->可在单独的js文件中执行console.log(arguments);//虽然编辑器中提示错误,但依旧可以运行,并且打印出相关的值,编辑器报错的原因是arguments必须在函数中使用,在函数外部使用会报错;
(1).module.exports、exports的区别:它们都是对象指向同一空间; console.log(module.exports == exports);//true; module.exports.a = 3; exports.b = 5;最终导出的对象{ a: 3, b: 5};若module.exports = 3, exports = 5;最终导出的是数字3;-> 因为内存空间变化了,若module.exports与exports同时使用,最终module.exports导出的是最终结果,因此开发中建议全部使用module.exports导出;
(2).require();//导入系统模块不用写路径,导入自己封装的模块需要写路径;-> 若其只是引入不赋值给某个变量时,其会执行引入文件的代码,也就是其会将某文件引入进来;开发中导出、导入配套使用;
(3).module;//其也是对象,exports是其的属性 -> exports也是对象;
(4).__filename;//文件名,绝对路径;
(5).__dirname;//路径名(不包含xx.js),绝对路径;
3、nodejs内置模块
(1).事件模块:
[1].大多数Node.js核心API都是采用惯用的异步事件驱动架构 (fs/http都是如此)
[2].所有能触发事件的对象都是EventEmitter类的实例
[3].事件流程:引入模块--> 创建EventEmitter对象 --> 注册事件 -->触发事件
(2).fs模块: 文件系统模块(filesystem) ->引入fs模块-->调用方法-->异常捕获;
(3).net模块
(4).Http创建服务器模块
网友评论