首先要明白什么是Node。其实简单地讲,就是针对网络应用开发的平台。它的主要特征大致有以下两点:一个是基于Google的JavaScript运行时引擎V8,另一个是扩展了Node标准类库: TCP,同步或异步文件管理。
那么为什么使用Node?可以在服务器端运行js: 现有前端团队可直接参与后端js开发,抑或js天生支持非阻塞IO;
IO: 代表一切数据进出程序的操作,包括: 文件读写, 数据库操作, 网络操作,但存在的问题是有延迟
传统阻塞IO: IO操作会阻塞当前主线程,直到本次IO操作完成,才能执行后续代码。
非阻塞IO: 即使处理较慢的IO操作时,主进城仍然能处理其他请求;Js天生支持非阻塞: 回调函数=事件循环+回调队列。所有非阻塞的操作,返回的结果暂时在回调队列中等待;尚学堂•百战程序员陈老师指出由事件循环,自动依次取回到主程序中恢复执行。回调队列在主程序之外存储回调函数,所以,不会干扰主程序执行。
非阻塞在Web服务器中:
普通服务器端应用: 虽然可实现每个请求独立线程/进程, 但如果一个请求中,包含多个阻塞IO操作(访问数据库,网络,读写硬盘文件),该请求返回的时间就等于所有IO操作的时间总和——慢。
Node服务器端应用: 不但每个请求是一个独立的线程,且,每个请求内的每个IO操作,都是非阻塞的。
一个包含多个IO操作的请求,返回的总响应时间,仅仅等于其中一个时间最长的IO操作的时间。
Node.js vs javascript:
Javascript: 编程语言, 依照ECMAScript
2种运行环境:
1.客户端浏览器: 由各种客户端浏览器中的js解释器执行
扩展: DOM API 和 BOM API 主要目的是为了操作网页内容和浏览器窗口
2.独立的js解释器:Node.js 应用程序开发和运行的平台
仅支持ECMAScript
扩展: 各种专门的服务器模块: TCP, HTTP, 文件读写, MYSQL
构建一个简单的node应用:
创建一个新的node项目: 基本命令:
mkdir 项目文件夹
cd 项目文件夹
npm init //负责在当前所在的项目目录下自动生成package.json配置文件
运行:node 入口文件.js
2.module
Node应用都是由模块组成:模块就是组织程序功能的一种文件或文件夹,Node应用采用CommonJS模块规范。
CommonJS规定:
1.每个文件就是一个模块,有自己的作用域——避免全局污染
一个文件内定义的变量,函数,类都是该文件私有,对其它文件默认不可见
2.对象,方法和变量也可以从一个文件/模块中导出(exports),用在其它文件/模块中。
实际项目中,都是将各种功能/数据,划分为不同项目模块来管理
如何定义一个模块:2步:
1.在模块/文件中定义业务代码(对象,class,函数)
2.将内部的功能抛出,用于将来其它js文件调用
2种情况:
面向对象的方式:
1.定义一种class或一个对象,包裹属性和功能
2.将class或对象直接赋值给module.exports,其中: module,指当前模块对象/当前文件。
3.exports是当前module对象的一个属性;
4.本质上也是一个对象,保存将来要抛出的所有东西,exports是当前模块对外的唯一接口
今后,只要希望将模块内部的东西,抛出到外部,供其它文件使用时,都要添加到module.exports上,其它文件要想使用当前模块的功能,就必须用require引入当前模块,而require的本质是找模块的exports。
领取专属 10元无门槛券
私享最新 技术干货