Node JS后端项目开发与生产环境总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node JS后端项目开发与生产环境总结相关的知识,希望对你有一定的参考价值。

参考技术A 建立在后台模板渲染(ejs, pug)的基础上。前后分离架构请参考 webpack热更新实现

nodemon 在js文件变化后悔重新运行程序,在 package.json 的 scripts 中添加:

nodemon还有许多可选配置,具体参阅 nodemon文档

以koa为例

如若想要将错误抛出到浏览器页面和美化错误页面, express 可用 express-error-handler , koa 可用 onerror

由于是后台模板渲染,所以没法用 webpack-dev-server 进行自动刷新。能做的就是利用 webpack 的 watch 在前端js改变后自动打包,当然还是免不了手动刷新

注意一定要开启 source-map ,不然无法定位报错位置。为通知 webpack 是生产还是开发环境,可以使用 cross-env ,然后在 package.json 的 scripts 中添加:

开发时应运行两个命令:

生产环境一般使用 pm2 , pm2 已经帮我们完成了进程守护和负载均衡,内部实现原理在此不再赘述,具体参考 pm2文档 。

生成的配置文件已包含了生产环境的基本本质。跟多配置请参考 pm2文档 ,在 package.json 文件的 scripts 中添加

生产环境下运行

这时我们可以通过 process 全局变量获取到环境状态,在 app.js 中添加

类似 nginx 的 access.log 和 error.log ,利用 fs 模块的 appendFile 方法来输出日志。首先在项目根目录下新建文件夹 logs

建立一个模板命名为 notFound.pug ,在路由之后渲染

在webpack中添加插件

发布应用时需运行

Node.js的Web后端开发调研

1. nodejs写后端优缺点(讲解nodejs与js区别)

1.1 Node.js是什么

Node.js 是一个开源与跨平台的 JavaScript 运行时环境

在浏览器外运行 V8 JavaScript 引擎(Google Chrome 的内核),

利用事件驱动、非阻塞和异步输入输出模型等技术提高性能

可以理解为 Node.js 就是一个服务器端的、非阻塞式I/O的、事件驱动的JavaScript运行环境

非阻塞异步

Nodejs采用了非阻塞型I/O机制,在做I/O操作的时候不会造成任何的阻塞,

当完成之后,以时间的形式通知执行操作

例如:

在执行了访问数据库的代码之后,将立即转而执行其后面的代码,

把数据库返回结果的处理代码放在回调函数中,从而提高了程序的执行效率

事件驱动

事件驱动就是当进来一个新的请求的时,请求将会被压入一个事件队列中,

然后通过一个循环来检测队列中的事件状态变化,如果检测到有状态变化的事件,

那么就执行该事件对应的处理代码,一般都是回调函数

比如:

读取一个文件,文件读取完毕后,就会触发对应的状态,

然后通过对应的回调函数来进行处理.

1.2 优缺点

优点:

  • 处理高并发场景性能更佳
  • 适合I/O密集型应用,指的是应用在运行极限时,CPU占用率仍然比较低,大部分时间是在做 I/O硬盘内存读写操作

因为Nodejs是单线程,带来的缺点有:

  • 不适合CPU密集型应用
  • 只支持单核CPU,不能充分利用CPU
  • 可靠性低,一旦代码某个环节崩溃,整个系统都崩溃

1.3 应用场景

借助Nodejs的特点和弊端,其应用场景分类如下:

  • 善于I/O,不善于计算。因为Nodejs是一个单线程,如果计算(同步)太多,则会阻塞这个线程
  • 大量并发的I/O,应用程序内部并不需要进行非常复杂的处理
  • 与 websocket 配合,开发长连接的实时交互应用程序

具体场景可以表现为如下:

  • 第一大类:用户表单收集系统、后台管理系统、实时交互系统、考试系统、联网软件、高并发量的web应用程序
  • 第二大类:基于web、canvas等多人联网游戏
  • 第三大类:基于web的多人实时聊天客户端、聊天室、图文直播
  • 第四大类:单页面浏览器应用程序
  • 第五大类:操作数据库、为前端和移动端提供基于json的API

其实,Nodejs能实现几乎一切的应用,只考虑适不适合使用它;

2. node.js后台框架介绍

2.1、Koa

第四名: koa2 30k (2013年11月发布) express 的继任者。

https://github.com/koajs/koa​github.com

Koa更像是一个“框架的框架”,因为它本身实在太简单了且极度自由。

Koa 使用 Generator 来实现中间件的流程控制,使用try/catch 来增强异常处理,

同时在 Koa 框架中你再也看不到复杂的 callback 回调了。

Koa框架本身非常小,只打包了一些必要的功能,没有进程管理得搭配着第三方包一起使用。

Koa.js 可以被用于:

  • 前台系统
  • 后台系统
  • 混合系统

Koa.js 主要特性:

  • 代表现代和未来
  • 与所有 Node.js 框架相比,体积更小。
  • 有一个内置的错误捕捉器,防止网站崩溃。
  • 使用 context 对象,该对象同时拥有请求和响应对象。

2.2、Nest

第三名: nest.js 30.8k (2017年11月发布) 目前上榜框架中发布最晚,

也是star 最高且增长最快的 typescript 后端框架。

https://github.com/nestjs/nest​github.com

Nest.js 中文文档​docs.nestjs.cn

Nest 是一个用于构建高效,可扩展的 Node.js 服务器端应用程序的框架。

真正完备的、工业级的框架。

它使用渐进式 JavaScript,内置并完全支持 TypeScript(但仍然允许开发人员使用纯 JavaScript 编写代码),

并结合了 OOP(面向对象编程),FP(函数式编程)和 FRP(函数式响应编程)的元素。

提供完整的解决方案,从代码到模块拆分到微服务模型。

并且它的框架底层 HTTP 平台默认是基于 Express 实现的,所以不必担心第三方库的缺失。

它也提供了一个开箱即用的应用程序架构,

允许开发人员和团队创建高度可测试,可扩展,松散耦合且易于维护的应用程序。

Nest.js 可以被用于:

  • 编写更清晰和可重用的代码。
  • 编写具有更高层次结构的代码,如拦截器、过滤器、管道等;
  • 编写可扩展、可测试和松散型应用程序。

Nest.js 主要特性

  • 易于扩展:可与其他库一起使用。
  • 允许开发人员完全使用纯 JavaScript 进行编码。
  • 结合了函数式编程、面向对象编程和响应式编程的特点。
  • 公开框架 API,帮助开发者使用各平台上的各种第三方模块。
  • 它有一个详细且维护良好的文档。

2.3、Total

Total.js是助你创建Node.js,Web页面/应用的好框架,同样支持MVC架构。

2.4、Socket

Socket.io 是用来在客户端和服务器端之间创建实时双向通信的框架。

要做到这一点,客户端需要在浏览器中安装 http://Socket.io,服务器也要集成 http://Socket.io 包。

这使得数据可以在数百万种形式中共享。然而,最受欢迎的方法仍然是 JSON。

Socket.io 由以下两个部分组成:

  • JavaScript 服务:Node.js
  • JavaScript 客户端库:Node.js

注意: Socket.io 还兼容许多其他语言,如 Java、C+、Swift、Dart、.Net 和 Python。

Socket.io 可以被用于:

  • 各种命名空间
  • 广播
  • 事件处理
  • 错误处理
  • 日志和调试
  • 聊天应用
  • 内部

Socket.io 主要特性:

  • 将信息编码为命名的 JSON 或二进制事件。
  • 在应用程序中添加“实时”能力。
  • 支持自动重新连接
  • 出色的速度和可靠性
  • 即时通讯和聊天

2.5、Sails

第五名: sails 21.6k (2012年7月) 最早的 node.js 类 ror 框架。

https://github.com/balderdashy/sails​github.com

Sails 是一个非常稳固的 Node.js 框架,提供了建立任何规模的 Web 应用所需要的所有功能。

在底层使用了 Express框架来提供对 HTTP 请求的处理,同时使用 Socket.IO 框架来处理WebSocket 请求。

它也实现了 ORM 功能,让你的应用程序可以在不进行大的修改的前提下,就可以从一个后端数据库,切换到另外一个。

Sails 特别适合用来开发对数据的实时更新有较高要求的应用,而且它的注释巨多巨详细,生怕你不知道怎么用。关心开发者的框架才能长久下去喔。

2.6、Egg

第六名:egg 16.2k (2016年7月) 阿里开源的 node.js 框架,国内使用较为普及。

https://github.com/eggjs/egg​github.com

Egg基于Koa,约束和规范化团队开发,核心是帮助开发团队和开发人员降低开发和维护成本。

它提供基于 Egg 定制上层框架的能力,高度可扩展的插件机制,内置多进程管理,

性能优异,框架稳定。它已被用在阿里多条产品线上,可以证明它的安全可靠性,请放心使用。

7、Hapi.js

第九名: hapi 12.8k (2012年8月) 老牌的 node.js 框架。

https://github.com/hapijs/hapi​github.com

Hapi.js延续了Express.JS的所有优点,并且增加了一些功能。

开发者不用再浪费时间构建基础架构,可以利用这些时间来编写可重用的应用逻辑。

它的一些优点:修复bug和增加新功能都不需要花费时间,为不同类型的客户端构建API,

基于插件的体系结构使扩展变得容易,更好地控制如何处理请求。

Hapi.js 可以被用于:

  • 网站
  • HTTP 代理应用
  • 应用程序接口服务

Hapi.js 主要特性:

  • 输入验证
  • 日志
  • 错误处理
  • 代码可重用性
  • 缓存
  • 没有外部依赖
  • 基于配置的功能
  • 集成框架:在 Node 框架中提供全面的认证和授权 API 支持。

以上是关于Node JS后端项目开发与生产环境总结的主要内容,如果未能解决你的问题,请参考以下文章

Node.js面试题:侧重后端应用与对Node核心的理解

Node.js的Web后端开发调研

电子书 Node.js开发指南.pdf

19 条 Node.js 生产环境中的最佳实践

Node.js项目的线上服务器部署与发布

node - 开发环境与生产环境