Express和Koa2的區別

前言

猶記得前段時間一次面試中,面試官問到:能說一說express和koa的區別嗎?當時內心輕蔑一笑,這問題簡單,因而信心滿滿回答道:一個是基於回調,一個是基於Promise的。當時面試官楞了一下,笑了笑沒說什麼,我當時便意識到有什麼地方不對,後來查了下資料,發現確實沒有這麼簡單。javascript

我總結了我查閱到的資料,但願對各位童鞋有所幫助。java

Express和Koa2的區別和聯繫

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的。
在這裏插入圖片描述
在這裏插入圖片描述服務器

相關文章
相關標籤/搜索