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生态系统

1.github很重要~~

附录B.调试Node

1.JSHint

https://github.com/zhangyue0503/html5js/tree/master/nodejsinaction

原文发布于微信公众号 - 硬核项目经理(fullstackpm)

原文发表时间:2017-07-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券