Node.js有什么作用
这篇文章将为大家详细讲解有关Node.js有什么作用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
一、欢迎进入Node.js世界
1.DIRT(data-intensive real-time)表示数据密集型实时程序。因为Node自身在I/O上非常轻量,它善于将数据从一个管道混排或代理到另一个管道上,这能在处理大量请求时持有很多开放的链接,并且只占用一小部分内存。它的设计目标是保证响应能力。
二、构建有多个房间的聊天室程序
1.事件发射器:是跟某种资源相关联的,它能向这个资源发送消息,也能从这个资源接收消息。资源可以连接远程服务器,或者更抽象的东西,比如游戏中的角色
三、Node编程基础
A.Node功能的组织及重用
1.Node模块允许你从被引入文件中选择要暴露给程序的函数和变量。如果模块返回的函数或变量不止一个,那它可以通过设定exports对象的属性来指明它们。但如果模块只返回一个函数或变量,则可以设定module.exports属性
2.require以你要用的模块路径为参数,以同步的方式寻找它,定位到这个模块并加载文件中的内容,是Node中少数几个同步I/O操作之一,不要在I/O密集的地方使用
3.module.exports可以对外提供单个变量、函数或者对象,如果创建了一个既有exports又有module.exports的模块,那它会返回module.exports,而exports会被忽略
B.异步编程技术
1.两种响应编辑管理方式:回调和事件监听
回调通常用来定义一次性响应的逻辑,它被当做参数传给异步函数,描述了异步操作完成之后要做什么
事件监听器,本质上也是一个回调,不同的是,它跟一个概念实体(事件)相关联。
2.一个Node HTTP服务器实例就是一个事件发射器,一个可以继承、能够添加事件发射及处理能力的类(EventEmitter)
3.回调时尽早从函数中返回。Node中大多数内置模块在使用回调时都会带有两个参数:一个是用来放可能会发生的错误,另一个是放结果的
4.事件发射器会触发事件,并且在那些事件被触发时能处理它们。
5.在创建异步程序时,你必须密切关注程序的执行流程:事件轮询的条件、程序变量,以及其他随着程序逻辑执行而发生变化的资源
C.异步逻辑的顺序化
1.让一组异步任务顺序执行的概念被称为流程控制。分为:
串行:需要一个接着一个做的任务
并行:不需要一个接着一个做的任务
四、构建Node Web程序
A.HTTP服务器的基础知识
1.在结束响应之前 ,你可以在请求的生命期内运行任何你想运行的异步逻辑。如果你没能结束响应,请求会挂起,直到客户端超时或一直处于打开状态
B.构建RESTful Web服务
1.Buffer.byteLength(),字节长度,Content-Length应该是字节长度
C.提供静态文件服务
1.*.pipe()管道
五、存储Node程序中的数据
A.无服务器的数据存储
1.内存存储:存放少量经常使用的数据
2.基于文件的存储:用文件系统存放数据,有并发问题
六、Connect
1.Connect中有一个挂载的概念,可以给中间件或整个程序定义一个路径前缀
2.构建中间件时,你应该关注那些小型的、可配置的部分。构建大量微小的、模块化的、可重用的中间件组件来搭成你的程序。保持中间件的小型化和专注性有助于将复杂的程序逻辑分解 成更小的组成部分
七、Connect自带的中间件
1.解析cookie、请求主体和查询字符串的中间件:cookieParser()bodyParser()、limit()、query()
2.实现Web程序核心功能的中间件:logger()、favicon()、methodOverride()、host()、session()
3.会话对象在各个请求间会被串行化为JSON对象:不允许循环属性,不能用函数对象,Date对象无法正确串行化等
4.处理Web程序安全的中间件:basicAuth()、csrf()、errorHandler()
5.提供静态文件服务的中间件:static()、compress()、directory()
*大部分已经不是自带的了,参考:
https://github.com/senchalabs/connect
https://github.com/expressjs/basic-auth-connect
八、Express
1.Node中的__dirname用来确定当前运行的文件所在的目录
2.*express全局命令安装:sudo npm install -g express-generator(4.x以后)
九、Express进阶
1.Node是单线程的,没有线程本地存储。对于HTTP服务器而言,请求和响应变量是唯一的上下文对象
十、测试Node程序
1.单元测试:
TDD:Mocha、nodeunit、assert模块
BDD:Mocha、Vows、should.js
2.验收测试也被称为功能测试,它测试程序的输出而不是逻辑,可以再提供一层防护,找出可能被单元测试漏掉的bug,包括Tobi、Soda
十一、Web程序模板
1.ejs:https://github.com/tj/ejs,nom install ejs
2.Hogan
3.jade
十二、部署Node程序并维持正常运行时间
1.让Node保持运行,Forever工具:
sudo node install -g forever
forever start/stop server.js
2.Upstart工具,重启崩溃程序,记录日志等
sudo apt-get install upstart
sudo yum install upstart
sudo service xxxxx.conf (upstart配置文件)
3.Node增加了集群API,借助这个API程序可以在不同的同价格上同时运行多个"工人",让单个程序使用多核实现起来更容易
十三、超越Web服务器
1.由于Node的异步天性,它很适合用来执行那些在同步环境中比较困难或效率低下的I/O密集型任务
2.Socket.IO允许你用服务器和客户端之间的双向通讯通道编写实时的Web程序。在基于浏览器的游戏、聊天程序和流媒体应用中非常流行
3.Buffer是Node给开发者准备的特殊数据类型,它像是一块长度固定的原始二进制数据板坯,可以把缓冲区看做数组,只是它们的大小是固定的,并且只能存放数字0到255,能处理原始字节,所以可以用它们实现任何底层的协议
4.全局的process对象,包含当前进程的相关信息,比如传给它的参数和当前设定的环境变量,每个Node进程都有一个单例的全局process对象,由所有模块共享访问
5.fs模块,包含高层的ReadStream和WriteStream等,大部分Node文档都指向了对应man页面中的C函数解释上(扩展模块:fstream模块,filed模块)
6.繁衍外部进程:
cp.exec(),在回调中繁衍命令并缓冲结果的高层API
cp.spawn(),将单例命令繁衍进Child-Process对象中的底层API
cp.fork(),用内置的IPC通道繁衍额外Node进程的特殊方法
7.解析命令行参数:process.argv
关于"Node.js有什么作用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。