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的。
在这里插入图片描述

你可能感兴趣的:(express,node.js,koa,koa.js)