介绍Node.js于10年前首次推出,现已成为全球最大的开源项目,在GitHub上拥有+59,000颗星,下载量超过10亿次。流行度快速增长的部分原因是Node.js允许开发人员对应用程序的客户端和服务器端部分使用相同的语言:JavaScript。Node.js是一个开源和跨平台的JavaScript运行时环境,专为构建可扩展的服务器端WEB应用程序而设计。具有高并发、扩展性强的特点。由于它的指数级增长和社区的流行,许多框架被创建来提高生产力。在本文中,我们将探讨Node.js中三个最流行的框架之间的区别:Express、Koa和Hapi。在以后的文章中,我们将探讨Next、Nuxt和Nest。比较基于:GitHubStars和npm下载安装基本的HelloWorld应用程序优点缺点性能安全社区参与ExpressExpress是一个最小且灵活的Web应用程序框架,它为Web和移动应用程序提供一组强大的功能,它的行为就像一个中间件,可以帮助manageserversandroutesstarGitHubstar:+43,000npmweeklydownloads6,881,035install确保你已经安装了node和npm//你可以安装express到项目依赖npminstallexpress--save//如果你想临时安装Express而不是将它添加到依赖项列表中,您可以使用npminstallexpress--no-saveHelloWorld这是最基本的示例,说明如何创建一个侦听端口3000并以“HelloWorld!”响应的express应用程序。//这里只创建根目录其他目录return404constexpress=require('express')constapp=express()constport=3000app.get('/',(req,res)=>res.send('HelloWorld!'))app.listen(port,()=>console.log(`Exampleapplisteningonport${port}!`))好处几乎是标准的Node.jsweb中间件简单,简单、灵活和可扩展快速开发应用程序完全可定制学习曲线低易于集成第3方服务和中间件主要专注于浏览器、开箱即用的模板和渲染集成缺点虽然Express.js是一个非常方便和易于使用的框架它有一些可能影响开发过程的小缺点。组织需要非常清楚,以避免在维护代码时出现问题随着代码库规模的增长,重构变得非常具有挑战性重构需要大量的人工劳动,因为您需要创建所有端点PerformanceExpress是网络的一个层application基本封装,继承Node.js的特性以前也有一些表达性能的最佳实践,包括:使用gzip压缩不使用sync函数来正确记录(用于调试,使用debug等特殊模块,applicationactivity使用winston或bunyan)使用try-catch或promises正确处理异常确保您的应用程序使用进程管理器自动重新启动,或者使用systemd或upstartinit等系统在集群中运行您的应用程序。您可以通过启动一个进程集群来极大地提高Node.js应用程序的性能缓存请求结果,这样您的应用程序就不会重复操作来一遍又一遍地为相同的请求提供服务使用负载均衡器运行它的多个实例并分配流量,例如Nginx或HAProxy使用静态资源的反向代理。它处理错误页面、压缩、缓存、服务文件和负载平衡等性能最佳实践一个简单的“HelloWorld”应用程序每秒有以下性能请求:安全Node.js漏洞直接影响Express,因此请务必使用FortheNode.js的最新稳定版本,检查express以获得最佳安全实践。社区参与Contributors:220PullRequests:821Express社区定期活动包括Gitter、IRC频道、问题、Wiki等。最后,express可能是Node.js最流行的框架,还有许多其他流行的框架建立在Express之上.koaKoa是由Express背后的同一批人构建的一个新的web框架,旨在成为web应用程序和API开发领域中更小、更具表现力和更健壮的基石。Koa通过使用异步函数,帮助你抛弃回调函数,有效增强错误处理Koa不捆绑任何中间件,而是提供了一套优雅的方法来帮助你快速愉快地编写服务器端应用程序starGitHubstar:+25,000npmdownloadsperweek:+300K安装Koa需要nodev7.6.0或更高版本的支持,因为内部使用了ES6特性npmikoanodemy-koa-app.jsHelloWorld创建一个web服务,监听3000端口并返回'HelloWorld'constKoa=require('洋槐');constapp=newKoa();app.use(asyncctx=>{ctx.body='HelloWorld';});app.listen(3000);好处Koa改进了互操作性、健壮性,使编写中间件变得更加愉快。集成大量WebAPI,但不绑定中间件。非常轻巧。核心的Koa模块只有大约2K行代码。它具有非常好的用户体验。通过try/catch,可以更好的处理错误。异步控制流使代码更具可读性。HighConsKoa社区相对较小不兼容Express风格的中间件(目前也遇到过兼容其他框架的中间件)PerformanceKoa本身是一个非常轻量级的框架,用于构建具有出色性能的Web应用程序。代码的可读性和可维护性都比较高。当然,一些性能最佳实践也是必不可少的,比如:集群并行运行,在代码中使用异步API来保持代码的小而轻,使用gzip压缩等。一个简单的“HelloWorld”应用已经每秒性能请求如下:SecurityKoa有大量的中间件,提供相应的功能映射社区贡献者数量:169PullRequests:577关于koa的一些讨论最后,Koa专注于核心中间件功能,设计明确使用async/等待让异步代码更易读,HapiHapi是一个基础功能比较丰富的框架,开发者更专注于业务而不是花时间去搭建基础设施,配置驱动的模式不同于传统的web服务器运行,他还有一个独特的功能,能够在特定IP上创建服务器,功能与onPreHandler类似。当你需要它时,你可以拦截特殊请求并做一些必要的操作star_GitHubStars:+11000npmWeeklydownloads:+222,293Installation确保你已经安装了nodenpminstallhapiHelloWorld下面的例子是使用hapi的最基本的helloworld应用:'使用严格';constHapi=require('hapi');//创建监听8000端口的服务constserver=Hapi.server({host:'localhost',port:8000});//添加路由server.route({method:'GET',path:'/hello',handler:function(request,h){return'helloworld';}});//启动服务conststart=asyncfunction(){try{awaitserver.start();}catch(err){console.log(err);进程.exit(1);}console.log('服务器运行于:',server.info.uri);};开始();Benefits提供了一个强大的插件系统,允许您快速添加新功能并修复错误可扩展API以更深入地控制请求处理。创建(REST)API的最佳选择,提供路由、输入、输出验证和缓存编写一次以适应每一方详细的API参考和对文档生成的良好支持兼容React、Angular和Vue等任何前端框架.js)一起创建单页应用程序基于配置的伪中间件提供缓存、身份验证和输入验证提供基于插件的扩展架构提供非常好的企业插件,例如joi、yar、catbox、boom、tv和travelogueCons代码结构复杂插件不兼容,只能使用指定的插件,如:catboxjoiboomtvgoodtravelogue等。端点是手动创建的,必须手动测试。Refactoringismanualperformance2017年对Node框架的研究表明,hapi优于其他框架最差表现者一个简单的“HelloWorld”应用程序每秒有以下性能请求:)验证插件。它适用于常规请求和CORS请求Joi:JavaScript对象的对象模式描述语言和验证器Hapi-rbac用户访问控制Blankie足够灵活的白名单机制Cryptiles加密库社区贡献者数量:184PullRequests:1176LastExpress它仍然是目前最流行。Koa因为拥抱了ES6而崛起,hapi依然是大型项目的首选。不管是Express、Koa还是Hapi,都是目前非常成熟的框架。几乎所有都能满足您的需求,没有最好,只有最合适的文章来源Colombia,PionerasDevelopers,StartupWeekend并曾在EmpireJS、MedellinJS、PionerasDev和GDG发表过演讲。她喜欢分享知识、推广JavaScript和Node.js生态系统并参与重要的技术活动和会议以增强她的知识和人际网络OriginallyConnect
