专栏首页Fundebug如何选择正确的Node框架:Express,Koa还是Hapi?

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

摘要: Node三驾马车。

Fundebug经授权转载,版权归原作者所有。

简介

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安装到项目依赖
  npm install express --save
  // 如果要临时安装Express而不是将其添加到依赖项列表,则可以使用
  npm install express --no-save
  • Hello World

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

  // 这里只创建根目录 其他目录返回404
  const express = require('express')
  const app = express()
  const port = 3000
  app.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’

  const Koa = require('koa');
  const app = new Koa();
  app.use(async ctx => {
    ctx.body = 'Hello World';
  });
  app.listen(3000);
  • 好处
  • Koa提高了互操作性,健壮性,使编写中间件变得更加愉快。
  • 集成了大量的web API,但是没有绑定中间件
  • 非常轻量,核心的Koa模块只有大约2K行代码
  • 拥有非常好的用户体验
  • 通过try / catch更好地处理错误
  • 异步控制流,代码可读性更高
  • 缺点
  • Koa社区相对较小
  • 与Express风格的中间件不兼容(目前还有遇到与其他框架兼容的中间件)
  • 性能

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

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

  • 集群
  • 并行运行
  • 在代码中使用异步API
  • 保持代码小而轻
  • 以及使用gzip压缩 等等

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

  • 安全

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';
  const Hapi=require('hapi');
  // 创建一个服务监听8000端口
  const server=Hapi.server({
     host:'localhost',
      port:8000
  });
  // 添加路由
  server.route({
      method:'GET',
      path:'/hello',
      handler:function(request,h) {
         return'hello world';
      }
  });
  // 启动服务
  const start = async function() {
     try {
         await server.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、金山软件、百姓网等众多品牌企业。欢迎大家免费试用

原文链接:https://segmentfault.com/a/1190000018973856

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 哪种JavaScript编程风格最流行?

    对于 JavaScrript 编程风格,有两个最大争议:缩进使用空格还是制表符?行尾是否需要使用分号?当然,还有更多其他争议,比如:定义多行数组时,逗号应该放在...

    Fundebug
  • JavaScript 初学者必看“箭头函数”

    是不是很酷!虽然是一个极端简洁的例子,但是很好的表述了箭头函数在写代码时的优势。我们来深入了解箭头函数的语法:

    Fundebug
  • JavaScript大师必须掌握的12个知识点

    为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。

    Fundebug
  • 数据结构与算法(二)-线性表之单链表顺序存储和链式存储

    前言:前面已经介绍过数据结构和算法的基本概念,下面就开始总结一下数据结构中逻辑结构下的分支——线性结构线性表

  • spring boot 多数据源加载原理

    git代码:https://gitee.com/wwj912790488/multiple-data-sources

    爱撸猫的杰
  • 数据结构09 哈夫曼树

    这一篇要总结的是树中的哈夫曼树(Huffman Tree),我想从以下几点对其进行总结: 1、什么是哈夫曼树 2、如何构建哈夫曼树 3、哈夫曼编码 4、代码实现...

    nnngu
  • 云存储的成本可能是模糊的

    云存储服务提供便利,可以减少IT支出,但并非所有情况都如此。企业在确定将关键数据放入云计算之前务必先进行数学运算。 ? 如果有人相信平常所看到的IT内容,可能...

    静一
  • 被控造假、打人之后要一雪前耻!“杀马特”华裔教授推出paGAN,GoodFellow也点赞

    【新智元导读】还记得“杀马特教授”黎颢吗?他将率领团队在下周召开的SIGGRAPH中展示一项黑科技“paGAN”:每秒1000帧扫描,用单幅照片实时生成超逼真动...

    新智元
  • EMA算法及其tensorflow实现

    滑动平均模型可以使模型在测试数据上更健壮(robust)的方法------滑动平均模型。在采用随机梯度下降算法训练神经网络时,使用滑动平均模型在很多应用中都可以...

    于小勇
  • 为了增加 Alphabet 兴趣,Twitter 再收机器学习公司

    【新智元导读】Twitter 昨日宣布收购机器学习公司 Magic Pony,除了增强其图像和视频处理能力,还隐藏着让自己对 Alphabet 更有吸引力的动机...

    新智元

扫码关注云+社区

领取腾讯云代金券