前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Node.js实战

Node.js实战

作者头像
硬核项目经理
发布2019-08-06 15:25:02
4.8K0
发布2019-08-06 15:25:02
举报

一、欢迎进入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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农老张 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档