简介

Node.js是10年前首次推出的,目前它已经成为世界上最大的开源项目,在GitHub上有+59,000颗星,下载次数超过10亿。流行度快速增长的部分原因是Node.js允许开发人员在应用程序的客户端和服务器端部分使用相同的语言:JavaScript。Node.js是一个开源和跨平台的JavaScript运行时环境,专为构建可扩展的服务器端WEB应用而设计,自身具有高并发、扩展性强等特点。由于社区其呈指数级增长和普及,因此创建了许多框架来提高生产力。在本文中,我们将探讨Node.js中三个最流行的框架之间的差异:Express,Koa和Hapi。在以后的文章中,我们将研究Next,Nuxt和Nest。

比较基于:

GitHub Stars和npm下载

安装

基本的Hello World应用程序

好处

缺点

性能

安全

社区参与

Express

Express是一个最小且灵活的Web应用程序框架,为Web和移动应用程序提供了一组强大的功能,它的行为就像一个中间件,可以帮助管理服务器和路由

star

GitHub star:+43,000

npm每周下载 6,881,035

安装

确保你已经安装node和npm

//你可以将express安装到项目依赖npminstallexpress–save

// 如果要临时安装Express而不是将其添加到依赖项列表,则可以使用

npm install express --no-save

Hello World

这是关于如何创建一个侦听端口3000并响应“Hello World!”的快速应用程序的最基本示例

// 这里只创建根目录 其他目录返回404constexpress=require(‘express’)constapp=express()constport=3000app.get(’/’,(req,res)=>res.send(‘Hello World!’))app.listen(port,()=>console.log(Example app listening on port ${port}!))

好处

几乎是Node.js Web中间件的标准

简单,简约,灵活和可扩展

快速开发应用程序

完全可定制

学习曲线低

轻松集成第三方服务和中间件

主要关注浏览器,模板和渲染集成开箱即用

缺点

尽管Express.js是一个非常方便且易于使用的框架,但它有一些可能影响开发过程的小缺点。

组织需要非常清楚,以避免在维护代码时出现问题

随着代码库大小的增加,重构变得非常具有挑战性

需要大量的手工劳动,因为您需要创建所有端点

性能

Express是对web应用的一层基本封装,继承了Node.js的特性

当天也有一些express性能的最佳实践包括:

使用gzip压缩

不要使用同步功能

正确记录(用于调试,使用特殊模块,如调试,应用程序活动使用winston或bunyan)

使用try-catch或promises正确处理异常

确保您的应用程序使用流程管理器自动重新启动,或使用systemd或upstartinit等系统

在群集中运行您的应用。您可以通过启动进程集群来大大提高Node.js应用程序的性能

缓存请求结果,以便您的应用不会重复操作以反复提供相同的请求

使用负载均衡器运行它的多个实例并分配流量,如Nginx或HAProxy

对静态资源使用反向代理。它可以处理错误页面,压缩,缓存,提供文件和负载平衡等

更多性能最佳实践

一个简单的“Hello World”应用程序每秒具有以下性能请求:

安全

Node.js漏洞直接影响Express,因此确保使用最新的稳定版Node.js

查看express 最佳安全实践

社区参与

贡献者数量:220

Pull Requests:821

Express社区定期活动包括 Gitter,IRC channel, issues, Wiki等等

最后,express可能是Node.js最流行的框架,还有许多其他流行的框架都是基于Express构建的。

koa

Koa 是一个新的 web 框架,由 Express幕后的原班人马打造,致力于成为web应用和API开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa帮你丢弃回调函数,并有力地增强错误处理Koa并没有捆绑任何中间件而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序

star

GitHub star:+25,000

npm每周下载:+ 300K

安装

Koa需要nodev7.6.0以上版本支持,因为内部使用了ES6的特性

npm i koa

node my-koa-app.js

Hello World

创建一个web服务,监听3000端口返回‘Hello World’

constKoa=require(‘koa’);constapp=newKoa();app.use(asyncctx=>{ctx.body=‘Hello World’;});app.listen(3000);

好处

Koa提高了互操作性,健壮性,使编写中间件变得更加愉快。

集成了大量的web API,但是没有绑定中间件

非常轻量,核心的Koa模块只有大约2K行代码

拥有非常好的用户体验

通过try / catch更好地处理错误

异步控制流,代码可读性更高

缺点

Koa社区相对较小

与Express风格的中间件不兼容(目前还有遇到与其他框架兼容的中间件)

性能

Koa本身是一个非常轻量级的框架,可以构建具有出色性能的Web应用程序。代码可读性和维护性都相对较高

当然一些性能的最佳实践也是必不可少的,例如:

集群

并行运行

在代码中使用异步API

保持代码小而轻

以及使用gzip压缩 等等

一个简单的“Hello World”应用程序每秒具有以下性能请求:

安全

Koa有大量的中间件,提供相应的功能 贴图一张

社区

贡献者数量:169

Pull Requests:577

关于koa的一些讨论

最后,Koa专注于核心中间件功能,设计显式地利用了async/ waiting使异步代码可读性更高

Hapi

Hapi是基础功能相对丰富的框架。开发人员更专注于业务,而不是花时间构建基础架构。配置驱动的模式,区别于传统的web服务器操作。他还有比一个独特功能,能够在特定的IP上创建服务器,具有类似的功能onPreHandler。再需要的时候你可以拦截特地的请求做一些必要的操作

star _ GitHub Stars: +11000

npm 周下载: +222,293

安装

确保你已经安装node

npm install hapi

Hello World

以下示例是使用hapi的最基本的hello world应用程序:

‘use strict’;constHapi=require(‘hapi’);// 创建一个服务监听8000端口constserver=Hapi.server({host:‘localhost’,port:8000});// 添加路由server.route({method:‘GET’,path:’/hello’,handler:function(request,h){return’hello world’;}});// 启动服务conststart=asyncfunction(){try{awaitserver.start();}catch(err){console.log(err);process.exit(1);}console.log(‘Server running at:’,server.info.uri);};start();

好处

提供了一个强大的插件系统,允许您快速添加新功能和修复错误

可扩展的API

对请求处理有更深层次的控制。

创建(REST)api的最佳选择,提供了路由、输入、输出验证和缓存

一次编写适配各端

详细的API参考和对文档生成的良好支持

与任何前端框架(如React,Angular和Vue.js)一起使用来创建单页面应用程序

基于配置的伪中间件

提供缓存,身份验证和输入验证

提供基于插件的扩展架构

提供非常好的企业插件,如joi,yar,catbox,boom,tv和travelogue

缺点

代码结构复杂

插件不兼容,只能使用指定的插件如:catbox joi boom tv good travelogue等

端点是手动创建的,必须手动测试

重构是手动的

性能

017年对Node框架的研究表明hapi相对于其他框架的表现最差

一个简单的“Hello World”应用程序每秒具有以下性能请求:

安全

hapi安全性主要依赖于插件 插件选择

Crumb反(XCSRF)验证插件。它适用于常规请求和CORS请求

Joi:JavaScript对象的对象模式描述语言和验证器

Hapi-rbac 用户的访问权限控制

Blankie 足够灵活的白名单作机制

Cryptiles 加密库

社区

贡献者数量:184

Pull Requests:1176

最后Express仍然是当下最为流行,koa因拥抱ES6正在崛起,hapi还是大型项目的第一选择

不管是Express,Koa还是Hapi目前都是非常成熟的框架。几乎都能满足你的需求,没有最好,只有最合适

Choosing the right Node.js Framework: Express, Koa, or Hapi?

关于Fundebug

Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java线上应用实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了10亿+错误事件,付费客户有Google、360、金山软件、百姓网等众多品牌企业。欢迎大家免费试用!简介

Node.js是10年前首次推出的,目前它已经成为世界上最大的开源项目,在GitHub上有+59,000颗星,下载次数超过10亿。流行度快速增长的部分原因是Node.js允许开发人员在应用程序的客户端和服务器端部分使用相同的语言:JavaScript。Node.js是一个开源和跨平台的JavaScript运行时环境,专为构建可扩展的服务器端WEB应用而设计,自身具有高并发、扩展性强等特点。由于社区其呈指数级增长和普及,因此创建了许多框架来提高生产力。在本文中,我们将探讨Node.js中三个最流行的框架之间的差异:Express,Koa和Hapi。在以后的文章中,我们将研究Next,Nuxt和Nest。

比较基于:

GitHub Stars和npm下载

安装

基本的Hello World应用程序

好处

缺点

性能

安全

社区参与

Express

Express是一个最小且灵活的Web应用程序框架,为Web和移动应用程序提供了一组强大的功能,它的行为就像一个中间件,可以帮助管理服务器和路由

star

GitHub star:+43,000

npm每周下载 6,881,035

安装

确保你已经安装node和npm

//你可以将express安装到项目依赖npminstallexpress–save

// 如果要临时安装Express而不是将其添加到依赖项列表,则可以使用

npm install express --no-save

Hello World

这是关于如何创建一个侦听端口3000并响应“Hello World!”的快速应用程序的最基本示例

// 这里只创建根目录 其他目录返回404constexpress=require(‘express’)constapp=express()constport=3000app.get(’/’,(req,res)=>res.send(‘Hello World!’))app.listen(port,()=>console.log(Example app listening on port ${port}!))

好处

几乎是Node.js Web中间件的标准

简单,简约,灵活和可扩展

快速开发应用程序

完全可定制

学习曲线低

轻松集成第三方服务和中间件

主要关注浏览器,模板和渲染集成开箱即用

缺点

尽管Express.js是一个非常方便且易于使用的框架,但它有一些可能影响开发过程的小缺点。

组织需要非常清楚,以避免在维护代码时出现问题

随着代码库大小的增加,重构变得非常具有挑战性

需要大量的手工劳动,因为您需要创建所有端点

性能

Express是对web应用的一层基本封装,继承了Node.js的特性

当天也有一些express性能的最佳实践包括:

使用gzip压缩

不要使用同步功能

正确记录(用于调试,使用特殊模块,如调试,应用程序活动使用winston或bunyan)

使用try-catch或promises正确处理异常

确保您的应用程序使用流程管理器自动重新启动,或使用systemd或upstartinit等系统

在群集中运行您的应用。您可以通过启动进程集群来大大提高Node.js应用程序的性能

缓存请求结果,以便您的应用不会重复操作以反复提供相同的请求

使用负载均衡器运行它的多个实例并分配流量,如Nginx或HAProxy

对静态资源使用反向代理。它可以处理错误页面,压缩,缓存,提供文件和负载平衡等

更多性能最佳实践

一个简单的“Hello World”应用程序每秒具有以下性能请求:

安全

Node.js漏洞直接影响Express,因此确保使用最新的稳定版Node.js

查看express 最佳安全实践

社区参与

贡献者数量:220

Pull Requests:821

Express社区定期活动包括 Gitter,IRC channel, issues, Wiki等等

最后,express可能是Node.js最流行的框架,还有许多其他流行的框架都是基于Express构建的。

koa

Koa 是一个新的 web 框架,由 Express幕后的原班人马打造,致力于成为web应用和API开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa帮你丢弃回调函数,并有力地增强错误处理Koa并没有捆绑任何中间件而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序

star

GitHub star:+25,000

npm每周下载:+ 300K

安装

Koa需要nodev7.6.0以上版本支持,因为内部使用了ES6的特性

npm i koa

node my-koa-app.js

Hello World

创建一个web服务,监听3000端口返回‘Hello World’

constKoa=require(‘koa’);constapp=newKoa();app.use(asyncctx=>{ctx.body=‘Hello World’;});app.listen(3000);

好处

Koa提高了互操作性,健壮性,使编写中间件变得更加愉快。

集成了大量的web API,但是没有绑定中间件

非常轻量,核心的Koa模块只有大约2K行代码

拥有非常好的用户体验

通过try / catch更好地处理错误

异步控制流,代码可读性更高

缺点

Koa社区相对较小

与Express风格的中间件不兼容(目前还有遇到与其他框架兼容的中间件)

性能

Koa本身是一个非常轻量级的框架,可以构建具有出色性能的Web应用程序。代码可读性和维护性都相对较高

当然一些性能的最佳实践也是必不可少的,例如:

集群

并行运行

在代码中使用异步API

保持代码小而轻

以及使用gzip压缩 等等

一个简单的“Hello World”应用程序每秒具有以下性能请求:

安全

Koa有大量的中间件,提供相应的功能 贴图一张

社区

贡献者数量:169

Pull Requests:577

关于koa的一些讨论

最后,Koa专注于核心中间件功能,设计显式地利用了async/ waiting使异步代码可读性更高

Hapi

Hapi是基础功能相对丰富的框架。开发人员更专注于业务,而不是花时间构建基础架构。配置驱动的模式,区别于传统的web服务器操作。他还有比一个独特功能,能够在特定的IP上创建服务器,具有类似的功能onPreHandler。再需要的时候你可以拦截特地的请求做一些必要的操作

star _ GitHub Stars: +11000

npm 周下载: +222,293

安装

确保你已经安装node

npm install hapi

Hello World

以下示例是使用hapi的最基本的hello world应用程序:

‘use strict’;constHapi=require(‘hapi’);// 创建一个服务监听8000端口constserver=Hapi.server({host:‘localhost’,port:8000});// 添加路由server.route({method:‘GET’,path:’/hello’,handler:function(request,h){return’hello world’;}});// 启动服务conststart=asyncfunction(){try{awaitserver.start();}catch(err){console.log(err);process.exit(1);}console.log(‘Server running at:’,server.info.uri);};start();

好处

提供了一个强大的插件系统,允许您快速添加新功能和修复错误

可扩展的API

对请求处理有更深层次的控制。

创建(REST)api的最佳选择,提供了路由、输入、输出验证和缓存

一次编写适配各端

详细的API参考和对文档生成的良好支持

与任何前端框架(如React,Angular和Vue.js)一起使用来创建单页面应用程序

基于配置的伪中间件

提供缓存,身份验证和输入验证

提供基于插件的扩展架构

提供非常好的企业插件,如joi,yar,catbox,boom,tv和travelogue

缺点

代码结构复杂

插件不兼容,只能使用指定的插件如:catbox joi boom tv good travelogue等

端点是手动创建的,必须手动测试

重构是手动的

性能

017年对Node框架的研究表明hapi相对于其他框架的表现最差

一个简单的“Hello World”应用程序每秒具有以下性能请求:

安全

hapi安全性主要依赖于插件 插件选择

Crumb反(XCSRF)验证插件。它适用于常规请求和CORS请求

Joi:JavaScript对象的对象模式描述语言和验证器

Hapi-rbac 用户的访问权限控制

Blankie 足够灵活的白名单作机制

Cryptiles 加密库

社区

贡献者数量:184

Pull Requests:1176

最后Express仍然是当下最为流行,koa因拥抱ES6正在崛起,hapi还是大型项目的第一选择

不管是Express,Koa还是Hapi目前都是非常成熟的框架。几乎都能满足你的需求,没有最好,只有最合适

Choosing the right Node.js Framework: Express, Koa, or Hapi?

关于Fundebug

Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java线上应用实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了10亿+错误事件,付费客户有Google、360、金山软件、百姓网等众多品牌企业。欢迎大家免费试用!

如何选择正确的Node框架:Express,Koa还是Hapi?相关推荐

  1. vue:无法将“vue”识别为脚本_「前端架构」React和Vue -CTO的选择正确框架的指南...

    快速总结:为项目选择正确的javascript框架或库是CTO和项目经理的基本任务.然而,选择的范围很大程度上取决于几个因素,如项目时间.学习曲线.框架性能和团队规模.这篇文章旨在指导他们选择正确的j ...

  2. 「前端架构」React和Vue -CTO的选择正确框架的指南

    快速总结:为项目选择正确的javascript框架或库是CTO和项目经理的基本任务.然而,选择的范围很大程度上取决于几个因素,如项目时间.学习曲线.框架性能和团队规模.这篇文章旨在指导他们选择正确的j ...

  3. 如何命令行结束react程序_前端架构React和Vue CTO的选择正确框架的指南

    快速总结:为项目选择正确的javascript框架或库是CTO和项目经理的基本任务.然而,选择的范围很大程度上取决于几个因素,如项目时间.学习曲线.框架性能和团队规模.这篇文章旨在指导他们选择正确的j ...

  4. Node.js框架对比:Express/Koa/Hapi

    Node.js框架对比:Express/Koa/Hapi 引言 Express.js是当今使用最广泛的Node.js Web应用程序框架.它似乎是大多数Node.js Web应用程序中的基本依赖项,即 ...

  5. node.js Web应用框架Express入门指南

    node.js Web应用框架Express入门指南 作者: 字体:[增加 减小] 类型:转载 时间:2014-05-28 我要评论 这篇文章主要介绍了node.js Web应用框架Express入门 ...

  6. Express,Koa和Hapi.js的并排比较

    如果您是Node.js开发人员,则有时可能会使用Express.js创建您的应用程序或API. Express.js是一个非常流行的Node.js框架,甚至在它之上构建了其他一些框架,例如Sails. ...

  7. 从Nest到Nesk -- 模块化Node框架的实践

    文: 达孚(沪江Web前端架构师) 本文原创,转至沪江技术 首先上一下项目地址(:>): Nest:https://github.com/nestjs/nest Nesk:https://git ...

  8. 选择适合的Node js授权认证策略

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 选择适合 ...

  9. 从零开始搭建Node.js, Express, Ejs, Mongodb服务器

    http://www.toolmao.com/nodejs-express-ejs-mongodb-server 本文改自非鱼的<[翻译]前端开发人员入门指南,从零开始搭建Node.js, Ex ...

  10. 基于Node+Vue+Express开发实现商城系统

    项目编号:BS-QD-006 前言: 2003年中国电子商城进入低谷期,在绝大多数人选择放弃电子商城的情况下,依旧有些企业仍未放弃,并苦苦坚持电子商城的发展.这使得人们不得不重新考虑如何定位新一代的电 ...

最新文章

  1. 学python要多少钱-python学习费用多少合适
  2. java中 == 与 equal 的区别
  3. ANT 运行jar包的中文乱码问题
  4. [react-router] React-Router 4怎样在路由变化时重新渲染同一个组件?
  5. 常见的注册界面实现的效果
  6. 导数与微分的知识点思维导图_高中生物思维导图知识点总结
  7. 移动宽带连接不上mysql_MySQL Workbench 6.2.4 下载 因为移动网络打不开官方也可能是国内网络问题 备用自己...
  8. IP-Guard验收报告详细版
  9. 服务器芯片成本,2021年全球服务器行业成本结构及出货量分析[图]
  10. 学习笔记-DQPSK系统的调制与解调
  11. #10064. 「一本通 3.1 例 1」黑暗城堡
  12. 全国大学生软件测试大赛Web应用测试(一)赛项简介
  13. background:rgba()
  14. 农村经济与科技杂志农村经济与科技杂志社农村经济与科技编辑部2022年第9期目录
  15. iphone6 越狱教程
  16. Python练习14:天天向上的力量I
  17. 出海解不了分众传媒的焦虑
  18. 光伏发电极其并网控制matlab simulink仿真文件,最大功率点跟踪采用扰动观察法
  19. 计算机bios设置翻译,电脑bios设置的中文翻译图解
  20. 迅雷BT方式的路由器设置

热门文章

  1. 生物识别设备有问题_有您数据的生物识别
  2. 微信小程序反编译获取源码
  3. 静脉炎的症状是什么?
  4. 地图上分成一块一块区域 高德地图_高德地图绘制区域边界线
  5. C语言中的while(y--)什么意思,while(x)什么意思
  6. 企业微信和小程序绑定,获取unionid
  7. 浙工大 drcom客户端 嵌入 Linux路由器
  8. 怎么用matlab进行频域分析法,如何用Matlab进行频域分析?
  9. LSL-- Events
  10. 怎么免费注册微信小程序-微信小程序开发-视频教程1