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