犹记得前段时间一次面试中,面试官问到:能说一说express和koa的区别吗?当时内心轻蔑一笑,这问题简单,因而信心满满回答道:一个是基于回调,一个是基于Promise的。当时面试官楞了一下,笑了笑没说什么,我当时便意识到有什么地方不对,后来查了下资料,发现确实没有这么简单。javascript
我总结了我查阅到的资料,但愿对各位童鞋有所帮助。java
Express是基于 Node.js 平台,快速、开放、极简的 Web 开发框架Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 经过利用 async 函数,Koa 帮你丢弃回调函数,并有力地加强错误处理。 Koa 并无捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。node
一个简单的Express服务器web
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
Express的中间件是线性模型
Koa的中间件是洋葱模型(聊一聊KOA的洋葱模型)npm
Express自带了Router和Static的中间件
Koa须要自行安装Router和Static的中间件segmentfault
能够看到搜索koa,npm上相关包只有5000多个,而搜索express则有两万多个,因此就目前来讲koa的社区活跃度是不如express的。服务器