koa和express有哪些不同?

简介: koa和express有哪些不同?

框架介绍

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 等功能都移除了,使得框架本身更轻量。

缺点:社区相对较小。

相关文章
|
6月前
|
开发框架 JavaScript 前端开发
比较两个突出的node.js框架:koa和express
接上文讲述了 koa框架,这边文章比较一下这两个突出的node.js框架:koa和express
|
开发框架 JavaScript 前端开发
Node.js Express VS Koa
我自己实际调研过,做过分享技术选型
112 0
|
前端开发 JavaScript 中间件
express VS koa
express 出来的时候,js 还是处于混沌期间,es6的标准没有出来。而node的事件处理的方式都是基于 cb(callback) 的这种形式,在当时来看,这种方式是比较好的一种方式。所以express 里面的中间件处理的方式基本上都是回调。es6 的出现,带来了许多新的标准。使得express 不得不考虑需要兼容es6中的语法, 而 es6中处理异步的方式是promise,还有后面陆续的 async 和 await 等语法糖。(express 不是说不能使用这些语法糖,他使用第三方的库是可以解决的,只是没有koa那么优雅)
express VS koa
|
SQL 存储 JavaScript
重学Node.js及其框架(Express, Koa, egg.js) 之 MySQL及Nodejs中使用MySQL(下)
重学Node.js及其框架(Express, Koa, egg.js) 之 MySQL及Nodejs中使用MySQL
|
算法 JavaScript Shell
重学Node.js及其框架(Express, Koa, egg.js) 之 token的使用
重学Node.js及其框架(Express, Koa, egg.js) 之 token的使用
|
存储 JavaScript 中间件
重学Node.js及其框架(Express, Koa, egg.js) 之 Koa框架(下)
重学Node.js及其框架(Express, Koa, egg.js) 之 Koa框架
|
JSON JavaScript 中间件
重学Node.js及其框架(Express, Koa, egg.js) 之 Koa框架(上)
重学Node.js及其框架(Express, Koa, egg.js) 之 Koa框架
|
JSON JavaScript 安全
重学Node.js及其框架(Express, Koa, egg.js) 之 Express框架
重学Node.js及其框架(Express, Koa, egg.js) 之 Express框架
|
缓存 移动开发 JavaScript
重学Node.js及其框架(Express, Koa, egg.js) 之 Nodejs基础(下)
重学Node.js及其框架(Express, Koa, egg.js) 之 Nodejs基础
|
XML JSON 缓存
重学Node.js及其框架(Express, Koa, egg.js) 之 Nodejs基础(中)
重学Node.js及其框架(Express, Koa, egg.js) 之 Nodejs基础