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