前言
犹记得前段时间一次面试中,面试官问到:能说一说express和koa的区别吗?当时心里轻蔑一笑,这问题简单,于是信心满满回答道:一个是基于回调,一个是基于Promise的。当时面试官楞了一下,笑了笑没说什么,我当时便意识到有什么地方不对,后来查了下资料,发现确实没有这么简单。
我总结了我查阅到的资料,希望对各位童鞋有所帮助。
Express和Koa2的区别和联系
Express是基于 Node.js 平台,快速、开放、极简的 Web 开发框架Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。
一个简单的Express服务器
const express = require('express');
const app = express();
/* 中间件 */
app.use((req, res, next) => {
console.log('middleware');
next();
console.log('middleware call');
});
/* 路由部分 */
const router = express.Router();
router.get('/', (req, res) => {
res.send('Home');
});
app.use(router);
/* 静态文件 */
app.use(express.static('./'));
app.listen(3000);
一个简单的Koa服务器
const Koa = require('koa');
const Router = require('koa-router');
const serve = require('koa-static');
const app = new Koa();
const router = Router();
/* 中间件 */
app.use(async (ctx, next) => {
console.log('middleware');
next();
console.log('middleware call');
});
/* 路由部分 */
router.get('/', (ctx) => {
ctx.body = 'Home';
});
app.use(router.routes());
/* 静态文件 */
app.use(serve('./'));
app.listen(3000);
用法的区别
Express是基于回调,也是node中最常见的Error-First
的模式(第一个参数是error对象)
Koa是使用的号称异步终极解决方案的Async/Await
,也就是基于Promise,使用Try-Catch来捕获错误
中间件的区别
Express的中间件是线性模型
Koa的中间件是洋葱模型(聊一聊KOA的洋葱模型)
集成度
Express自带了Router和Static的中间件
Koa需要自行安装Router和Static的中间件
社区活跃度
可以看到搜索koa,npm上相关包只有5000多个,而搜索express则有两万多个,所以就目前来说koa的社区活跃度是不如express的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。