前言还记得前段时间面试的时候,面试官问:能说说express和koa的区别吗?当时,我在心里轻蔑地笑了笑。问题很简单,我就自信地回答:一个是基于回调,一个是基于Promise。当时面试官愣了愣,笑着没说话。我当时就意识到不对劲了。后来查了资料,发现还真的没有那么简单。把查到的资料总结一下,希望对各位童鞋有所帮助。Express和Koa2的区别和联系Express基于Node.js平台,一个快速、开放、极简的Web开发框架Koa是一个全新的Web框架,由Express背后的原班人马打造,致力于成为一个Web应用程序和API开发Domains中更小、更具表现力、更强大的基石。通过利用异步函数,Koa可以帮助您放弃回调并大大增强错误处理。Koa没有捆绑任何中间件,而是提供了一套优雅的方法来帮助您快速愉快地编写服务器端应用程序。一个简单的Express服务器constexpress=require('express');constapp=express();/*中间件*/app.use((req,res,next)=>{console.log('middleware');next();console.log('middlewarecall');});/*路由部分*/constrouter=express.Router();router.get('/',(req,res)=>{res.send('Home');});app.use(router);/*静态文件*/app.use(express.static('./'));app.listen(3000);一个简单的Koa服务器constKoa=require('koa');constRouter=require('koa-router');constserve=require('koa-static');constapp=newKoa();常量路由器=路由器();/*middleware*/app.use(async(ctx,next)=>{console.log('middleware');next();console.log('middlewarecall');});/*路由部分*/router.get('/',(ctx)=>{ctx.body='Home';});app.use(router.routes());/*静态文件*/app.use(serve('./'));app.listen(3000);Express的用法区别是基于回调,也是node中最常见的Error-First模式(第一个参数是错误对象)。Koa就是所谓的异步终极解决方案。Async/Await,基于Promise,使用Try-Catch来捕获错误。中间件的区别在于Express的线性模型。Koa的中间件就是洋葱模型(下面说说KOA的洋葱模型)。ExpressRou集成ter和Static的中间件koa需要自己安装。搜索koa可以看到Router和Static这两个中间件的社区活跃度。npm上只有5000多个相关包,搜索express就有20000多个,所以就目前而言,koa的社区活跃度还不如express
