一些基于nodejs的服务端框架对比。express、koa、egg、nest、midway_Nicker_的专栏-程序员信息网_egg express koa
技术标签: serverless framework 服务器 nodejs webserver
一些基于nodejs的服务端框架对比。
express、koa、egg、nest、midway都是常见的nodejs开源框架。
其关系,基本如下:
Midway.js ---|> Egg.js ---|> Koa.js,
Nest.js ---|> Express.js
而koa实际上是express团队用新理念重写的,从架构上讲,更加先进一些。
midway.js和egg.js背后都是阿里的团队,其架构基于koa。
nest.js背后是国外的Trilon团队,其架构基于express。
Express
Express 是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能。
github:https://github.com/expressjs/express
中文官网:https://www.expressjs.com.cn/
Koa
koa 是由 Express 原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的 Web 框架。使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升错误处理的效率。koa 不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手。
koa是一个拥有洋葱模型中间件的http处理库,一个请求,经过一系列的中间件,最后生成响应。Koa的大致实现原理:context上下文的保存和传递,中间件的管理和next方法的实现。
所以koa的开发过程中,往往要引用他人开发的中间件,或是自己开发中间件,然后再开发业务逻辑。
中文官网:https://www.koajs.com.cn/
nest.js
nest是一个封装了node的有规范的框架,什么是有规范?意思是必须按照它制定的一套规则来写代码,否则程序就会无法运行。上手成本稍高一点,但是后期维护与扩展会很方便。
nest属于前端ts大趋势下深度使用注解特性并提供各种增强开发体验的框架,它提供了一套完整的解决方案,包含了认证、数据库、路由、http状态码、安全、配置、请求等开箱即用的技术。
<iframe data-google-container-id="a!2" data-google-query-id="CO2xjtPE5fYCFXW_lgodsJkN_A" data-load-complete="true" frameborder="0" height="280" id="aswift_1" marginheight="0" marginwidth="0" name="aswift_1" scrolling="no" src="https://googleads.g.doubleclick.net/pagead/ads?gdpr=0&us_privacy=1NNN&client=ca-pub-8705509105161355&output=html&h=280&adk=2231597620&adf=3624322323&pi=t.aa~a.3264912042~i.27~rp.4&w=740&fwrn=4&fwrnh=100&lmt=1648358156&num_ads=1&rafmt=1&armr=3&sem=mc&pwprc=2923125501&psa=0&ad_type=text_image&format=740x280&url=https%3A%2F%2Fwww.i4k.xyz%2Farticle%2FNicker_%2F110881857&fwr=0&pra=3&rh=185&rw=740&rpe=1&resp_fmts=3&wgl=1&fa=27&uach=WyJtYWNPUyIsIjEyLjIuMSIsIng4NiIsIiIsIjk5LjAuNDg0NC44MyIsW10sbnVsbCxudWxsLCI2NCIsW1siIE5vdCBBO0JyYW5kIiwiOTkuMC4wLjAiXSxbIkNocm9taXVtIiwiOTkuMC40ODQ0LjgzIl0sWyJHb29nbGUgQ2hyb21lIiwiOTkuMC40ODQ0LjgzIl1dLGZhbHNlXQ..&dt=1648358156211&bpp=4&bdt=3189&idt=-M&shv=r20220323&mjsv=m202203210101&ptt=9&saldr=aa&abxe=1&prev_fmts=0x0&nras=2&correlator=4462177103997&frm=20&pv=1&ga_vid=1363392830.1648358155&ga_sid=1648358155&ga_hid=1792379639&ga_fc=0&u_tz=480&u_his=10&u_h=1440&u_w=2560&u_ah=1415&u_aw=2560&u_cd=24&u_sd=1&dmc=8&adx=708&ady=1716&biw=2545&bih=1336&scr_x=0&scr_y=0&eid=44759876%2C44759927%2C44759842%2C31065371%2C31065814%2C21067496&oid=2&pvsid=2398969013318658&pem=960&tmod=1456616393&uas=0&nvt=1&ref=https%3A%2F%2Fwww.google.com%2F&eae=0&fc=1408&brdim=1440%2C25%2C1440%2C25%2C2560%2C25%2C2560%2C1415%2C2560%2C1336&vis=1&rsz=%7C%7Cs%7C&abl=NS&fu=128&bc=31&ifi=2&uci=a!2&btvi=1&fsb=1&xpc=Pc8PwQpjMq&p=https%3A//www.i4k.xyz&dtd=16" width="740"></iframe>
官网:https://nestjs.com/
中文文档:https://nestjs.bootcss.com/
Egg.js
为企业级框架和应用而生。
基于nodejs和koa.js。
相对而言,如果要做nodejs的服务,建议学习Egg,比起直接用Express或者koa,可以少造很多轮子。在此基础上,根据实际需要,可以去学习midway。
特点:
Egg 的插件机制有很高的可扩展性,一个插件只做一件事(比如 Nunjucks 模板封装成了 egg-view-nunjucks、MySQL 数据库封装成了 egg-mysql)。Egg 通过框架聚合这些插件,并根据自己的业务场景定制配置,这样应用的开发成本就变得很低。
Egg 奉行『约定优于配置』,按照一套统一的约定进行应用开发,团队内部采用这种方式可以减少开发人员的学习成本,开发人员不再是『钉子』,可以流动起来。没有约定的团队,沟通成本是非常高的,比如有人会按目录分栈而其他人按目录分功能,开发者认知不一致很容易犯错。但约定不等于扩展性差,相反 Egg 有很高的扩展性,可以按照团队的约定定制框架。使用 Loader 可以让框架根据不同环境定义默认配置,还可以覆盖 Egg 的默认约定。
<iframe data-google-container-id="a!3" data-google-query-id="CIfMjtPE5fYCFRiflgodgEcHzw" data-load-complete="true" frameborder="0" height="280" id="aswift_2" marginheight="0" marginwidth="0" name="aswift_2" scrolling="no" src="https://googleads.g.doubleclick.net/pagead/ads?gdpr=0&us_privacy=1NNN&client=ca-pub-8705509105161355&output=html&h=280&adk=2231597620&adf=1736798824&pi=t.aa~a.3264912042~i.35~rp.4&w=740&fwrn=4&fwrnh=100&lmt=1648358156&num_ads=1&rafmt=1&armr=3&sem=mc&pwprc=2923125501&psa=0&ad_type=text_image&format=740x280&url=https%3A%2F%2Fwww.i4k.xyz%2Farticle%2FNicker_%2F110881857&fwr=0&pra=3&rh=185&rw=740&rpe=1&resp_fmts=3&wgl=1&fa=27&uach=WyJtYWNPUyIsIjEyLjIuMSIsIng4NiIsIiIsIjk5LjAuNDg0NC44MyIsW10sbnVsbCxudWxsLCI2NCIsW1siIE5vdCBBO0JyYW5kIiwiOTkuMC4wLjAiXSxbIkNocm9taXVtIiwiOTkuMC40ODQ0LjgzIl0sWyJHb29nbGUgQ2hyb21lIiwiOTkuMC40ODQ0LjgzIl1dLGZhbHNlXQ..&dt=1648358156211&bpp=1&bdt=3188&idt=-M&shv=r20220323&mjsv=m202203210101&ptt=9&saldr=aa&abxe=1&prev_fmts=0x0%2C740x280&nras=3&correlator=4462177103997&frm=20&pv=1&ga_vid=1363392830.1648358155&ga_sid=1648358155&ga_hid=1792379639&ga_fc=0&u_tz=480&u_his=10&u_h=1440&u_w=2560&u_ah=1415&u_aw=2560&u_cd=24&u_sd=1&dmc=8&adx=708&ady=2499&biw=2545&bih=1336&scr_x=0&scr_y=0&eid=44759876%2C44759927%2C44759842%2C31065371%2C31065814%2C21067496&oid=2&pvsid=2398969013318658&pem=960&tmod=1456616393&uas=0&nvt=1&ref=https%3A%2F%2Fwww.google.com%2F&eae=0&fc=1408&brdim=1440%2C25%2C1440%2C25%2C2560%2C25%2C2560%2C1415%2C2560%2C1336&vis=1&rsz=%7C%7Cs%7C&abl=NS&fu=128&bc=31&ifi=3&uci=a!3&btvi=2&fsb=1&xpc=S3k0F7dUMY&p=https%3A//www.i4k.xyz&dtd=23" width="740"></iframe>
对比:
Express
是 Node.js 社区广泛使用的框架,简单且扩展性强,非常适合做个人项目。但框架本身缺少约定,标准的 MVC 模型会有各种千奇百怪的写法。Egg 按照约定进行开发,奉行『约定优于配置』,团队协作成本低。
Sails
是和 Egg 一样奉行『约定优于配置』的框架,扩展性也非常好。但是相比 Egg,Sails 支持 Blueprint REST API、WaterLine 这样可扩展的 ORM、前端集成、WebSocket 等,但这些功能都是由 Sails 提供的。而 Egg 不直接提供功能,只是集成各种功能插件,比如实现 egg-blueprint,egg-waterline 等这样的插件,再使用 sails-egg 框架整合这些插件就可以替代 Sails 了。
<iframe data-google-container-id="a!4" data-google-query-id="COaAj9PE5fYCFYqalgodnCYIEQ" data-load-complete="true" frameborder="0" height="280" id="aswift_3" marginheight="0" marginwidth="0" name="aswift_3" scrolling="no" src="https://googleads.g.doubleclick.net/pagead/ads?gdpr=0&us_privacy=1NNN&client=ca-pub-8705509105161355&output=html&h=280&adk=2231597620&adf=3376126097&pi=t.aa~a.3264912042~i.37~rp.4&w=740&fwrn=4&fwrnh=100&lmt=1648358156&num_ads=1&rafmt=1&armr=3&sem=mc&pwprc=2923125501&psa=0&ad_type=text_image&format=740x280&url=https%3A%2F%2Fwww.i4k.xyz%2Farticle%2FNicker_%2F110881857&fwr=0&pra=3&rh=185&rw=740&rpe=1&resp_fmts=3&wgl=1&fa=27&uach=WyJtYWNPUyIsIjEyLjIuMSIsIng4NiIsIiIsIjk5LjAuNDg0NC44MyIsW10sbnVsbCxudWxsLCI2NCIsW1siIE5vdCBBO0JyYW5kIiwiOTkuMC4wLjAiXSxbIkNocm9taXVtIiwiOTkuMC40ODQ0LjgzIl0sWyJHb29nbGUgQ2hyb21lIiwiOTkuMC40ODQ0LjgzIl1dLGZhbHNlXQ..&dt=1648358156211&bpp=1&bdt=3189&idt=-M&shv=r20220323&mjsv=m202203210101&ptt=9&saldr=aa&abxe=1&prev_fmts=0x0%2C740x280%2C740x280&nras=4&correlator=4462177103997&frm=20&pv=1&ga_vid=1363392830.1648358155&ga_sid=1648358155&ga_hid=1792379639&ga_fc=0&u_tz=480&u_his=10&u_h=1440&u_w=2560&u_ah=1415&u_aw=2560&u_cd=24&u_sd=1&dmc=8&adx=708&ady=3001&biw=2545&bih=1336&scr_x=0&scr_y=0&eid=44759876%2C44759927%2C44759842%2C31065371%2C31065814%2C21067496&oid=2&pvsid=2398969013318658&pem=960&tmod=1456616393&uas=0&nvt=1&ref=https%3A%2F%2Fwww.google.com%2F&eae=0&fc=1408&brdim=1440%2C25%2C1440%2C25%2C2560%2C25%2C2560%2C1415%2C2560%2C1336&vis=1&rsz=%7C%7Cs%7C&abl=NS&fu=128&bc=31&ifi=4&uci=a!4&btvi=3&fsb=1&xpc=1nK1NmMGnm&p=https%3A//www.i4k.xyz&dtd=28" width="740"></iframe>
官网:https://eggjs.org/zh-cn/
文档:https://eggjs.org/zh-cn/intro/index.html
github:https://github.com/eggjs/egg
Midway.js
midwayjs
一个面向未来的云端一体 Node.js 框架。
Midway 是一个适用于构建 Serverless 服务,传统应用、微服务,小程序后端的 Node.js 框架。
使用TypeScript
开发
Midway (中途岛) 是淘系架构团队(前淘宝UED)研发的一款面向未来的的 Node.js 框架。在大规模编程和 Serverless 等多种场景中,Midway 通过 TypeScript 和完全自研的依赖注入能力,将用户体验打造到极致。
<iframe data-google-container-id="a!5" data-google-query-id="CInfj9PE5fYCFQrIFgUdJo4DSA" data-load-complete="true" frameborder="0" height="280" id="aswift_4" marginheight="0" marginwidth="0" name="aswift_4" scrolling="no" src="https://googleads.g.doubleclick.net/pagead/ads?gdpr=0&us_privacy=1NNN&client=ca-pub-8705509105161355&output=html&h=280&adk=2231597620&adf=130450512&pi=t.aa~a.3264912042~i.45~rp.4&w=740&fwrn=4&fwrnh=100&lmt=1648358156&num_ads=1&rafmt=1&armr=3&sem=mc&pwprc=2923125501&psa=0&ad_type=text_image&format=740x280&url=https%3A%2F%2Fwww.i4k.xyz%2Farticle%2FNicker_%2F110881857&fwr=0&pra=3&rh=185&rw=740&rpe=1&resp_fmts=3&wgl=1&fa=27&uach=WyJtYWNPUyIsIjEyLjIuMSIsIng4NiIsIiIsIjk5LjAuNDg0NC44MyIsW10sbnVsbCxudWxsLCI2NCIsW1siIE5vdCBBO0JyYW5kIiwiOTkuMC4wLjAiXSxbIkNocm9taXVtIiwiOTkuMC40ODQ0LjgzIl0sWyJHb29nbGUgQ2hyb21lIiwiOTkuMC40ODQ0LjgzIl1dLGZhbHNlXQ..&dt=1648358156211&bpp=1&bdt=3189&idt=-M&shv=r20220323&mjsv=m202203210101&ptt=9&saldr=aa&abxe=1&prev_fmts=0x0%2C740x280%2C740x280%2C740x280&nras=5&correlator=4462177103997&frm=20&pv=1&ga_vid=1363392830.1648358155&ga_sid=1648358155&ga_hid=1792379639&ga_fc=0&u_tz=480&u_his=10&u_h=1440&u_w=2560&u_ah=1415&u_aw=2560&u_cd=24&u_sd=1&dmc=8&adx=708&ady=3606&biw=2545&bih=1336&scr_x=0&scr_y=0&eid=44759876%2C44759927%2C44759842%2C31065371%2C31065814%2C21067496&oid=2&pvsid=2398969013318658&pem=960&tmod=1456616393&uas=0&nvt=1&ref=https%3A%2F%2Fwww.google.com%2F&eae=0&fc=1408&brdim=1440%2C25%2C1440%2C25%2C2560%2C25%2C2560%2C1415%2C2560%2C1336&vis=1&rsz=%7C%7Cs%7C&abl=NS&fu=128&bc=31&ifi=5&uci=a!5&btvi=4&fsb=1&xpc=h9Z9mNL02i&p=https%3A//www.i4k.xyz&dtd=31" width="740"></iframe>
Midway 2.0 集成了 Serverless 能力,同时扩展了 RPC、Socket、微服务等场景,并在其中提供和前端一体化研发的能力,不同的场景之间可以组合、协作,给用户提供相对灵活又可靠的使用体验。
Midway给人一种框架的框架的感觉。
Midway可以结合其他框架使用,把Egg.js或者是Koa或者是Express作为其上层Web框架。
官网:https://www.midwayjs.org/
文档:Midway(v2)
github:https://github.com/midwayjs/midway
标签:框架,koa,egg,express,js,https,Egg
来源: https://www.cnblogs.com/sexintercourse/p/16062663.html