首页 > 其他分享 >Koa与Express的区别

Koa与Express的区别

时间:2022-10-29 19:57:13浏览次数:76  
标签:Express 区别 Koa res express 中间件 koa

Koa与Express的区别

glory glory 苦逼前端  

框架介绍

express框架是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,主要基于 Connect 中间件,并且自身封装了路由、视图处理等功能。

koa是 Express 原班人马基于 ES6 新特性重新开发的框架,主要基于 co 中间件,框架自身不包含任何中间件,很多功能需要借助第三方中间件解决,但是由于其基于 ES6 generator 特性的异步流程控制,解决了 "callback hell" 和麻烦的错误处理问题。

相同点

两个框架都对http进行了封装。相关的api都差不多,同一批人所写。

不同点

express内置了许多中间件可供使用,而koa没有。

express包含路由,视图渲染等特性,而koa只有http模块。

express的中间件模型为线型,而koa的中间件模型为U型,也可称为洋葱模型构造中间件。

express通过回调实现异步函数,在多个回调、多个中间件中写起来容易逻辑混乱。

// express写法
app.get('/test', function (req, res) {
    fs.readFile('/file1', function (err, data) {
        if (err) {
            res.status(500).send('read file1 error');
        }
        fs.readFile('/file2', function (err, data) {
            if (err) {
                res.status(500).send('read file2 error');
            }
            res.type('text/plain');
            res.send(data);
        });
    });
});


koa通过generator 和 async/await 使用同步的写法来处理异步,明显好于 callback 和 promise。

app.use(async (ctx, next) => {
    await next();
    var data = await doReadFile();
    ctx.response.type = 'text/plain';
    ctx.response.body = data;
});

总结

Express
优点:线性逻辑,通过中间件形式把业务逻辑细分、简化,一个请求进来经过一系列中间件处理后再响应给用户,清晰明了。
缺点:基于 callback 组合业务逻辑,业务逻辑复杂时嵌套过多,异常捕获困难。


Koa
优点:首先,借助 co 和 generator,很好地解决了异步流程控制和异常捕获问题。其次,Koa 把 Express 中内置的 router、view 等功能都移除了,使得框架本身更轻量。
缺点:社区相对较小。

标签:Express,区别,Koa,res,express,中间件,koa
From: https://www.cnblogs.com/sexintercourse/p/16839489.html

相关文章

  • Serialzable和Parcelable的区别?Bunder传递对象为什么需要序列化?
    1Bunder传递对象为什么需要序列化?因为bundle传递数据时只支持基本数据类型,所以在传递对象时需要序列化转换成可存储或可传输的本质状态(字节流)。序列化后的对象可以在网络、......
  • 【PyTorch】 torch.flatten()与nn.Flatten()的区别
    问题torch.flatten()与nn.Flatten()都可以实现展开Tensor,那么二者的区别是什么呢?方法经过查阅相关资料,发现二者主要区别有:(1)默认的dim不同,torch.flatten()默认的dim=0,而n......
  • Mybatis中#{}与${}的区别
    Mybatis中#{}与${}的区别#{}#{}表示一个占位符“?”,采用preparedStatement给占位符设置值,自动进行java类型和jdbc类型转换,进行预编译处理,#{}可以有效防止sql注入(预编译......
  • 【linux】rpm和src.rpm、rpm和noarch.rpm的区别
    目录​​简略​​​​前言​​​​一、rpm和src.rpm文件类型区别及联系​​​​二、rpm文件名称那么长,分别是什么意思?​​​​三、如何本地编译并安装rpm包?​​​​四、如何......
  • src、href区别,link、@import区别
    一、src与href·src(source)和href(超文本引用),都用于引用外部资源,如图片、音频、css文件、js文件等;·src(source),指向外部资源的位置,会将资源下载后嵌入到所处标签位置中。在......
  • 彻底弄懂StringBuffer与StringBuilder的区别
    彻底弄懂StringBuffer与StringBuilder的区别一问道StringBuffer与StringBuilder的区别,张口就来StringBuffer是线程安全的,因为它相关方法都加了synchronized关键字,String......
  • python系列:paramiko中invoke_shell和exec_command的区别
    目录​​exec_command​​​​invoke_shell​​exec_command只能运行一次,命令执行完成后channel将关闭,不能被复用。invoke_shell使用get_pty()获取一个伪终端后,需要使用invo......
  • c语言和python区别
    除了在语法使用上面的区别外,c语言和python的本质区别可能是在其语言性质上面的区别。简单来说C语言是编译语言,Python是脚本语言。1.C语言是编译型语言,经过编译后,生成机器码,......
  • python 中 import 和 from import 两种导入库的区别
    在学习python的时候,自己发现平时导入第三库的时候,有时候会使用from的方式,有的时候会直接使用import的方式去导入第三方库,最近探究他们之间的区别,区别如下第一种使用f......
  • 快读《ASP.NET Core技术内幕与项目实战》EFCore2.6:表达式树Expression和Func
    本节内容,涉及5.3(P142-P153)。主要NuGet包:ExpressionTreeToString(用于以string格式,输出表达式树)System.Linq.Dynamic.Core(通过字符串形式,非常简单的构建表达式树,可以不用......