猶記得前段時間一次面試中,面試官問到:能說一說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的。服務器