動態

詳情 返回 返回

Express和Koa2的區別 - 動態 詳情

前言

猶記得前段時間一次面試中,面試官問到:能説一説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的。
在這裏插入圖片描述
在這裏插入圖片描述

user avatar grewer 頭像 alijishu 頭像 anchen_5c17815319fb5 頭像 u_17443142 頭像 shuirong1997 頭像 jiavan 頭像 user_ze46ouik 頭像 54r9rxzy 頭像 heath_learning 頭像 happy2332333 頭像 hsr2022 頭像 morimanong 頭像
點贊 54 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.