常见的node框架express、koa,egg,学习哪个比较好?_第2页回答

2021-02-18 17:03发布

常见的node框架express、koa,egg,学习哪个比较好?

常见的node框架express、koa,egg,学习哪个比较好?

15条回答
小新没有蜡笔
2楼 · 2021-09-02 15:34

提到Node.js开发,不得不提目前炙手可热的2大框架express和koa。Express诞生已有时日,是一个简洁而灵活的web开发框架,使用简单而功能强大。Koa相对更为年轻,是Express框架原班人马基于ES6新特性重新开发的敏捷开发框架,现在可谓风头正劲,大有赶超Express之势。

Express和koa都是服务端的开发框架,服务端开发的重点是对HTTP Request和HTTP Response两个对象的封装和处理,应用的生命周期维护以及视图的处理等。 以下将主要通过这些方面,对两者进行一个对比介绍,看看到底有什么区别。

Express主要基于Connect中间件框架,功能丰富,随取随用,并且框架自身封装了大量便利的功能,比如路由、视图处理等等。而koa主要基于co中间件框架,框架自身并没集成太多功能,大部分功能需要用户自行require中间件去解决,但是由于其基于ES6 generator特性的中间件机制,解决了长期诟病的“callback hell”和麻烦的错误处理的问题,大受开发者欢迎。


椰松面包
3楼 · 2021-09-04 09:55

Express是一个集合式的框架,自身集成了router,static,views,bodyparse等等常用中间件。这样的设计让开发者能非常快速的搭建一个node后端服务,这个服务功能齐全。可以实现接口服务,静态资源服务,页面服务,甚至文件上传也能实现。但是使用Express就必须引入全部的中间件和功能,不管你有没有用到。

Koa2的设计思想就是小而美,轻量,插件化设计。只提供最基础的框架,所有功能都通过中间件引入。Koa将Express集成的中间件进行拆分,开发者按需引入即可使用

看你个人需求


征戰撩四汸
4楼 · 2021-09-08 16:32

1、Express 是一个Node.js的基础框架,主要基于 Connect 中间件,并且自身封装了路由(需要配合bodyParser)、视图处理等功能,使用人数众多,弊端是callback回调方式。

2、Koa 是一个比Express更精简,使用node新特性的中间件框架。其提供的是一个架子,而几乎所有的功能都需要由第三方中间件完成,比如koa-router, koa-view等。
Koa 利用 co 作为底层运行框架,利用 Generator 的特性,实现“无回调”的异步处理

一般都会学到,都需要去掌握了解没有必要去纠结学不学哪儿个


一个Ai
5楼 · 2021-09-09 15:46

1.1 架构设计


Express是一个集合式的框架,自身集成了router,static,views,bodyparse等等常用中间件。这样的设计让开发者能非常快速的搭建一个node后端服务,这个服务功能齐全。可以实现接口服务,静态资源服务,页面服务,甚至文件上传也能实现。但是使用Express就必须引入全部的中间件和功能,不管你有没有用到。


Koa2的设计思想就是小而美,轻量,插件化设计。只提供最基础的框架,所有功能都通过中间件引入。Koa将Express集成的中间件进行拆分,开发者按需引入即可使用。比如:




得益于这种设计,用户在选择中间件时有了更多的选项。你可以选择koa提供的中间件(如果koa提供的话),也可以选择社区或第三方开发的中间件,甚至自己写一个都可以。这在Express上是无法想象的。


总结来说,Express是一个功能齐全,开箱即用的集合式框架,比较重。Koa2是一个插件化的轻量框架,功能按需引入。


1.2 ECMAScript版本


Express是基于ES5开发的,受限制于当时的JavaScript标准,很多功能的实现方式不是很好。比如异步执行只能采用回调函数的方式。


Koa2是基于ES7(ES2016)开发的,原生支持异步函数 async/await,使用Promise作为异步处理的标准,支持箭头函数等ES6新语法。我想着重推荐一下async/await,因为它又一次改变了JavaScript异步编程的方式,可以不关心是不是异步操作,全用同步的方式去写。举个例子来对比一下Promise 和 async/await,用 Promise 和 async/await 实现同样的异步操作:






可以看出,async/await 的写法更简单整洁,也更方便阅读。 Koa2能完美的支持ES6,如果想使用ES6新特性,Koa2比Express更值得选择。


1.3 中间件执行机制


中间件的执行机制可以说是Koa相较Express最大的改进。有人问TJ Holowaychuk为什么不升级Express而要开发的新的Koa框架? TJ Holowaychuk就提到了中间件机制和Express不同,Express项目难以直接升级使用新的中间件机制,只能开发新的框架。


我们先看一下Express的中间件执行流程:


Express的中间件时线性执行的,每一个中间件处理完后只有两个选择:交给下一个中间件或者返回Response。




只要请求离开了,中间件就无法再次获得这个请求,更不能再对它进行处理。


Koa的中间件机制是洋葱模型,中间件像一层层的洋葱。请求要穿过洋葱,每个中间件也会被穿过两次。




这个洋葱模型相信大家都很熟悉了,它很直观的解释了koa中间件的执行流程。这种洋葱模型机制对解决某些问题帮助很大,比如统计一个请求耗时时间,或者需要回调下一个中间件的处理结果,使用koa处理起来就非常方便,但是使用Express就很难实现。


如果Express也想实现Koa的洋葱模型就比较困难,需要开发者在每一个中间件上都添加回调函数。因此Express项目真的很难直接使用Koa的中间件机制,怪不得TJ Holowaychuk大神也要另起炉灶。




如果你有这样的需求,与其写层层回调还不如直接使用Koa。


1.4 异常处理


Express的异常处理是有一个error处理中间件完成的,由于Express的中间件时线性流程,所以要处理错误信息就必须把error中间件放到最后。



ablabla
6楼 · 2021-09-16 14:50

nodejs的框架,express,这个是使用最多的框架,也是各个推荐新手入门的框架。


freediandianer
7楼 · 2021-10-13 18:11

很多人在选择框架的时候会不知所措,或者在面试时被问到框架间的区别,却不能很好的总结回答。今天就和大家分析对比一下目前主流的三个框架:Express,Koa2 和 Egg。相信能帮你了解它们之间的区别。


因为Egg是基于Koa开发的(Egg 1.x 基于Koa 1.x,Egg 2.x 基于Koa 2.x),所以Egg会继承Koa2对比Express的所有优点。因此我们先对比Express 和 Koa2,然后再对比Egg 和 Koa2。


1.Express VS Koa2


可能有些朋友还不知道,这两个框架师出同门,都是由nodejs大神 TJ Holowaychuk 开发并开源的。TJ Holowaychuk凭借频繁和高质量的提交,对nodejs社区做出了巨大的贡献。有人怀疑TJ Holowaychuk不是一个人,背后是一个团队,毕竟一个人完成这么多的工作量让人难以相信。


TJ Holowaychuk绝对称得上伟大的程序员,而伟大的程序员从来都是“缺少什么,就创造什么”。当年Bram Moolenaar 在 80 年代末购入他的Amiga计算机时,因为Amiga 上没有他最常用的编辑器vi,于是就开发了vim编辑器。TJ Holowaychuk觉得需要一个好用的node框架,于是就有了Express和Koa。




Express 和 Koa2 的区别主要有以下几点:


1.1 架构设计


Express是一个集合式的框架,自身集成了router,static,views,bodyparse等等常用中间件。这样的设计让开发者能非常快速的搭建一个node后端服务,这个服务功能齐全。可以实现接口服务,静态资源服务,页面服务,甚至文件上传也能实现。但是使用Express就必须引入全部的中间件和功能,不管你有没有用到。


Koa2的设计思想就是小而美,轻量,插件化设计。只提供最基础的框架,所有功能都通过中间件引入。Koa将Express集成的中间件进行拆分,开发者按需引入即可使用。比如:




得益于这种设计,用户在选择中间件时有了更多的选项。你可以选择koa提供的中间件(如果koa提供的话),也可以选择社区或第三方开发的中间件,甚至自己写一个都可以。这在Express上是无法想象的。


总结来说,Express是一个功能齐全,开箱即用的集合式框架,比较重。Koa2是一个插件化的轻量框架,功能按需引入。


1.2 ECMAScript版本


Express是基于ES5开发的,受限制于当时的JavaScript标准,很多功能的实现方式不是很好。比如异步执行只能采用回调函数的方式。


Koa2是基于ES7(ES2016)开发的,原生支持异步函数 async/await,使用Promise作为异步处理的标准,支持箭头函数等ES6新语法。我想着重推荐一下async/await,因为它又一次改变了JavaScript异步编程的方式,可以不关心是不是异步操作,全用同步的方式去写。举个例子来对比一下Promise 和 async/await,用 Promise 和 async/await 实现同样的异步操作:






可以看出,async/await 的写法更简单整洁,也更方便阅读。 Koa2能完美的支持ES6,如果想使用ES6新特性,Koa2比Express更值得选择。


1.3 中间件执行机制


中间件的执行机制可以说是Koa相较Express最大的改进。有人问TJ Holowaychuk为什么不升级Express而要开发的新的Koa框架? TJ Holowaychuk就提到了中间件机制和Express不同,Express项目难以直接升级使用新的中间件机制,只能开发新的框架。


我们先看一下Express的中间件执行流程:


Express的中间件时线性执行的,每一个中间件处理完后只有两个选择:交给下一个中间件或者返回Response。




只要请求离开了,中间件就无法再次获得这个请求,更不能再对它进行处理。


Koa的中间件机制是洋葱模型,中间件像一层层的洋葱。请求要穿过洋葱,每个中间件也会被穿过两次。




这个洋葱模型相信大家都很熟悉了,它很直观的解释了koa中间件的执行流程。这种洋葱模型机制对解决某些问题帮助很大,比如统计一个请求耗时时间,或者需要回调下一个中间件的处理结果,使用koa处理起来就非常方便,但是使用Express就很难实现。


如果Express也想实现Koa的洋葱模型就比较困难,需要开发者在每一个中间件上都添加回调函数。因此Express项目真的很难直接使用Koa的中间件机制,怪不得TJ Holowaychuk大神也要另起炉灶。




如果你有这样的需求,与其写层层回调还不如直接使用Koa。


1.4 异常处理


Express的异常处理是有一个error处理中间件完成的,由于Express的中间件时线性流程,所以要处理错误信息就必须把error中间件放到最后。




下面举个栗子说明在Express中如何使用这个错误处理中间件:


使用的规则就是:只要有错误,请调用error中间件。




如果逻辑比较多,恐怕要到处调用 next(err) 了。


希希
8楼 · 2021-10-17 21:04

对于开发者来最好的15个Node.JS框架:
Kiss
Kiss.js使用Django风格的模板。通过项目你可以看到,客户端的coffee scripts脚本在刚开始时会被加载。样式使用Stylus。
Sails
Sails 很容易]创建自定义的,企业级的Node.js应用。它被设计成你熟悉的类似Ruby on Rails的MVC框架,但是又可以满足现代应用的需要: 可扩展的数据驱动接口,面向服务的架构。它特别擅长设计图表,时时表单,或多人游戏,你可以在任何项目中使用。
Total
Total.js是另外一旧助你创建Node.js,Web页面/应用的好框架,同样支持MVC架构。它是一旧使用HTML,JavaScript和CSS创建的现代框架。

Partial
Partial.js又一个 Node.JS框架,开发者使用HTML,CSS和JavaScript可以创建大型的Web站点和应用。功能和架构类似于total.js
Flatiron
Flatiron.js同样也是一旧现代的下一代的web框架,帮助开发者创建惊艳的web应用和功能。

Socket Stream
Socket Stream是被来设计时时响应的单页面程序,基于快速的棋模块化r 特性。

Socket.io
Socket.io是基于node.js的实时框架,支持HTML的WebSocket和跨浏览器的向后监察。

Dozer
Dozer是一款极快r 支持前端应用的系统。它不是一个框架,不是一个工具包。Dozer的设计原则是为前端提供RESTful API的接口支持。
Coke
COKE是一个轻量级的MVC框架。它非常简单,模块化的,非常快。

Express.io
Express.io是一组实时的基于node.js的web开发框架,支持MVC构架创建Web应用。

Opa
Ops是g 个JavaScript的框架-快速的加密的Web开发。

Spine
现代的MVC模式,完全支持现代JavaScrip应用。

Mean
MEAN是一款优化后的全栈javascript node.js框架,将简化和加速你的web应用开发。

Sleek
一步就叫座创建快速的,灵活的,友好的web程序。

Stapes
Stapes.js假设你的流程和风格是未知r 。
kraken
Kraken是一个安全的可扩展的框架,可以帮助你更好组织你的架构。他们的模块都可以独立使用。

Derby
Web webjs将你的服务器端脚本变得更简单,更稳定,可读性晚好。
Geddy.
WINTERSMITH
基于node.js的快速的极小的,多平台支持的站点生成器。

相关问题推荐

  • PHP与Node.js的区别2021-01-18 10:23
    回答 19

    PHP胜出:代码与内容混合大家在输入的过程中当然希望能将自己的思路直接转化为网站的文本内容,同时还要为进程添加分支、一部分if-then语句以保证站点拥有漂亮的视觉效果,具体取决于URL中的某些参数。又或者,我们希望能够利用单一数据库将文本或者数据加以...

  • 回答 9
    已采纳

    这个问题涉及到的是整个web开发体系的变更。我尽量长话短说,有问题可以继续留言。现在的web开发体系可以说是在15年后才逐渐形成,因为15年比较特殊,html5和ES6都是在这一年发布,css3的最后一次更新在2014年。这些变更带来的变化是产生了前后分离的开发方式...

  • 回答 3

    初次接触nodejs确实有一些难度,因为思路语法都和js有了一些差别,属于后端思想,所以需要楼主多下功夫,进行系统学习之后就容易接受了

  • 回答 13

    //首先卸载已安装的node-sasscnpm uninstall node-sass//重新安装cnpm install node-sass//如果报关于gyp的错,安装相关的gyp编译环境npm install -g node-gyp//再重复执行以上的卸载安装步骤//安装完成启动项目试试npm run dev...

  • 回答 10

    node.js 和 javascript 从本质上来说没有什么区别,语言是一样的,都是javascript语言编写。但是,node.js 主要从事后台操作,javascript主要操作HTML的元素(前端)。

  • 回答 8

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。(事件驱动:事件触发过程中,进行决策的一种策略,简单说就是跟随当前时间点上出现的事物,调用可用的资源进行解决该事物...

  • 回答 10

    global 最根本的作用是作为全局变量的宿bai主。按照ECMAScript 的定义,满足以下条 件的变量是全局变量:在最外层定义的变量;全局对象的属性;隐式定义的变量(未定义直接赋值的变量)。当你定义一个全局变量时,这个变量同时也会成为全局对象的属性,反之亦...

  • 回答 4

        webpack构建工具是基于node平台的, 所以在安装之前必须先安装nodejs. 接在来就可以通过npm包管理工具在线安装webpack了.    对于webpack构建工具, 即可全局安装, 也可以局部安装. 一般情况下,大多数会采用局部安装, 因为每一个项目需要对webpack...

  • 回答 3

    vue-cli脚手架是基于node平台的, 所以安装之前, 必须先安装nodejs. 之后直接通过npm包管理工具即可完成vue-cli脚手架工具的安装. 目前市面上流行的vue-cli脚手架有两个版本, 接下来分别演示下:安装vue-cli-2.x版本// -g 表示全局安装 npm install vue-cli...

  • 回答 3

    1.打开node官网 https://nodejs.org/en/,选择 other Downloads,2.安装Windows Binary 64位或者32位3.将你减压后的路径保存一份,如(D:\soft\node-v10.16.3-win-x64)4.找到系统路径(控制面板-》系统-》高级系统设置-》环境变量-》path),获取到 5.找到...

  • 回答 5

    一、安装环境1、本机系统:Windows 10 Pro(64位)2、Node.js:v6.9.2LTS(64位)二、安装Node.js步骤1、下载对应你系统的Node.js版本2、选安装目录进行安装3、环境配置4、测试

  • 回答 4

    Node.js是一个基于Chrome v8引擎建立的JavaScript运行平台,用于搭建响应速度快、易于扩展的网络应用。本文和大家分享的是Node.js的一些特点,希望对大家有帮助。  异步I/O  这里,我们来详细解释一下:  异步是什么意思  比如说你的爸,今天要叫你做...

  • 回答 5

    dejs适用于I/O密集的应用,而不太适用于计算密集的应用我用 Node.js 开发了 Am I Hacked,算是有一点用 Node.js 支持大流量的经验。先列一些数字服务器是 Linode 512,也就是 Linode 上最低端的。...

没有解决我的问题,去提问