为什么80%的码农都做不了架构师?>>>   

先放一些别人写的

  • http://yemista.com/koa-js-vs-express-js-which-one-better-for-node-js/
  • https://www.airpair.com/node.js/posts/nodejs-framework-comparison-express-koa-hapi
  • https://cnodejs.org/topic/540335d0cd66f2eb379b21d5

我也来凑个热闹

群里很多人在问到底该用Koa还是express,本文会对比2个框架的各种细节,并给出指导意见,希望能够为大家解惑。

  • http://koajs.com/
  • http://expressjs.com/

koa

koa 是由 Express 原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的 Web 框架。使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升错误处理的效率。koa 不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手。

版本要求

Koa 目前需要 >=0.11.x版本的 node 环境。并需要在执行 node 的时候附带 --harmony 来引入 generators 。

express无所谓,目前0.10+都ok,甚至更低版本

中间件变化

Koa 应用是一个包含一系列中间件 generator 函数的对象。 这些中间件函数基于 request 请求以一个类似于栈的结构组成并依次执行。 Koa 类似于其他中间件系统(比如 Ruby’s Rack 、Connect 等), 然而 Koa 的核心设计思路是为中间件层提供高级语法糖封装,以增强其互用性和健壮性,并使得编写中间件变得相当有趣。

Koa 包含了像 content-negotiation(内容协商)、cache freshness(缓存刷新)、proxy support(代理支持)和 redirection(重定向)等常用任务方法。 与提供庞大的函数支持不同,Koa只包含很小的一部分,因为Koa并不绑定任何中间件。

和 express 基于的中间件Connect,差别并不大,思想都是一样的,它里面说的

增强其互用性和健壮性

我还没玩出太多感想,请大家指点

除了yield next;外,并无其他

yield要说一下,必须在处理的中间件里才会回调

比如

var koa = require('koa');
var app = koa();//1 x-response-timeapp.use(function *(next){var start = new Date;yield next;var ms = new Date - start;this.set('X-Response-Time', ms + 'ms');
});//2 loggerapp.use(function *(next){var start = new Date;yield next;var ms = new Date - start;console.log('%s %s - %s', this.method, this.url, ms);
});//3 responseapp.use(function *(){this.body = 'Hello World';
});app.listen(3000);

在程序启动的时候,1和2是没有执行的,只有当执行到任意请求,比如3的时候,它才会调用1和2

错误处理

koa

app.on('error', function(err){log.error('server error', err);
});

而在新版的express里

server.on('error', onError);/*** Event listener for HTTP server "error" event.*/function onError(error) {if (error.syscall !== 'listen') {throw error;}var bind = typeof port === 'string'? 'Pipe ' + port: 'Port ' + port;// handle specific listen errors with friendly messagesswitch (error.code) {case 'EACCES':console.error(bind + ' requires elevated privileges');process.exit(1);break;case 'EADDRINUSE':console.error(bind + ' is already in use');process.exit(1);break;default:throw error;}
}

二者实际上没有啥大差别

Koa Context

将 node 的 request 和 response 对象封装在一个单独的对象里面,其为编写 web 应用和 API 提供了很多有用的方法。

这些操作在 HTTP 服务器开发中经常使用,因此其被添加在上下文这一层,而不是更高层框架中,因此将迫使中间件需要重新实现这些常用方法。

context 在每个 request 请求中被创建,在中间件中作为接收器(receiver)来引用,或者通过 this 标识符来引用:

app.use(function *(){this; // is the Contextthis.request; // is a koa Requestthis.response; // is a koa Response
});

比express里爽一些,express里中间件可变参数还是会比较恶心,而且性能也不好

对比一些api

  • req
  • res

基本上一模一样

二者比较总结

https://github.com/koajs/koa/blob/master/docs/koa-vs-express.md

Feature Koa Express Connect
Middleware Kernel
Routing    
Templating    
Sending Files    
JSONP    

Does Koa replace Express?

It’s more like Connect, but a lot of the Express goodies were moved to the middleware level in Koa to help form a stronger foundation. This makes middleware more enjoyable and less error-prone to write, for the entire stack, not just the end application code.

Typically many middleware would re-implement similar features, or even worse incorrectly implement them, when features like signed cookie secrets among others are typically application-specific, not middleware specific.

拿koa来比较express并不太合适,可以说它是介于connect和express中间的框架

  • 与connect类似都是调用栈思想,但修改了中间件模式,使用generator
  • 把express里的一些好的东西加进去,但剔除了路由,视图渲染等特性

总结

koa是一个比express更精简,使用node新特性的中间件框架,相比之前express就是一个庞大的框架

  • 如果你喜欢diy,很潮,可以考虑koa,它有足够的扩展和中间件,而且自己写很简单
  • 如果你想简单点,找一个框架啥都有,那么先express

koa是大势所趋,我很想用,但我目前没有选koa,我的考虑

  • node 0.11+我目前没有搞定node-inspector,所以我啥时候搞定,啥时候迁移
  • 团队成本问题,如果他们连express都不会,上来就koa,学习曲线太陡,不合适
  • 目前基于express的快读开发框架需要一段时间迁移到koa

和es6的考虑是一样的,又爱又恨,先做技术储备,只要时机ok,毫不犹豫的搞起。

目前express由strongloop负责,它的下一步如何发展,还说不好,比如5.0、6.0是否会用koa作为中间件也不好说

koa代码很少,可以很容易读完

https://github.com/koajs/koa

另外值得提得一点是,核心开发者 @dead-horse 是阿里的员工,赞一下国内的开源。

12月份我写了一个koa-generator,可以让很多习惯express的人迁移过来,见文章https://cnodejs.org/topic/56650091e7cd33da066d6ee7

转载于:https://my.oschina.net/dawd/blog/744332

Koa 还是 Express相关推荐

  1. doodoo.js发布1.1.0 -- 中文最佳实践Node.js Web快速开发框架,支持Koa.js, Express.js中间件。包含多项功能改进,及Bug修复。...

    2019独角兽企业重金招聘Python工程师标准>>> doodoo.js发布1.1.0 -- 中文最佳实践Node.js Web快速开发框架,支持Koa.js, Express.j ...

  2. koa 和 express 的对比

    前言 天冷了,唯有学习来温暖自己. 最近利用业余的时间,跟着 coderwhy 老师学习 node.js,了解以及掌握一些服务端的常见知识: fileSystem:文件读取模块. events:事件流 ...

  3. node mysql和koa_2019年NodeJS框架Koa和Express选型比较

    Koa和Express都是NodeJS的主流应用开发框架. Express是一个完整的nodejs应用框架.Koa是由Express团队开发的,但是它有不同的关注点.Koa致力于核心中间件功能.nod ...

  4. 第四代Express框架koa简介

    文章目录 简介 koa和express koa使用介绍 中间件的级联关系 koa的构造函数 启动http server 自定义中间件 异常处理 简介 熟悉Spring MVC的朋友应该都清楚Sprin ...

  5. Node.js框架对比:Express/Koa/Hapi

    Node.js框架对比:Express/Koa/Hapi 引言 Express.js是当今使用最广泛的Node.js Web应用程序框架.它似乎是大多数Node.js Web应用程序中的基本依赖项,即 ...

  6. Express,Koa和Hapi.js的并排比较

    如果您是Node.js开发人员,则有时可能会使用Express.js创建您的应用程序或API. Express.js是一个非常流行的Node.js框架,甚至在它之上构建了其他一些框架,例如Sails. ...

  7. 三英战豪强,思绪走四方。浅谈我眼中的express、koa和koa2

    支持原创,本文为转载文章,转载是为了备忘或丢失,这么好的文章. https://www.jianshu.com/p/3806417a1991?from=timeline 前言 跟好朋友打赌,我要来个技 ...

  8. Node.js 应用开发详解04 3 大主流系统框架:由浅入深分析 Express、Koa 和 Egg.js

    上一讲我们没有应用任何框架实现了一个简单后台服务,以及一个简单版本的 MSVC 框架.本讲将介绍一些目前主流框架的设计思想,同时介绍其核心代码部分的实现,为后续使用框架优化我们上一讲实现的 MSVC ...

  9. 用koa开发一套内容管理系统(CMS),支持javascript和typescript双语言

    初衷 lin-cms是我们林间有风团队开源的一款CMS,它采用目前主流的前后端分离的架构,前端使用vue作为基础框架,后端选择了我们团队大量实践使用的flask作为基础框架. lin-cms剪彩 你也 ...

最新文章

  1. iOS7与iOS8的比較
  2. LaTeX输入单个点、横向多个点、竖向多个点、斜向多个点
  3. 南通大学16级软嵌班软件工程课程成绩汇总
  4. 关于Ubuntu 安装tftp服务器的问题解决
  5. kafka消息消费有延迟_消息中间件选型分析---从Kafka与RabbitMQ的对比来看全局
  6. 类中内容在内存中到底是如何分配的呢?
  7. 经典Android开发教程!这些新技术你们都知道吗?年薪超过80万!
  8. Java 设计模式(3)单例模式
  9. 如何配置Ubuntu17的软件库(sortware update)
  10. android RadioGroup中设置selector后出现多个别选中的RadioButton的解决办法
  11. MFC初步教程(二)
  12. Redis 单数据多源超高并发下的解决方案
  13. 30个Java自学网站
  14. 【数据融合】基于DS证据理论实现数据融合附matlab代码
  15. docker-comose入门到实战
  16. 服务器双路cpu装什么系统,双路服务器CPU是什么意思?双路CPU是什么?
  17. 【TouchDesigner学习笔记与资料】
  18. 高通平台wifi命令操作
  19. ultraISO如何把ISO镜像文件加载虚拟光驱
  20. Oops, can‘t find ‘llvm-config‘. Install clang or set $LLVM_CONFIG or $PATH beforehand.

热门文章

  1. FreeSWITCH 总体架构
  2. Word2Vec小心得
  3. OOP组合和继续的优缺点
  4. 我遇到的Quartus II警告及原因——持续更新
  5. 为安装好的SSAS实例重命名
  6. ArcGIS Server9.3+ArcGIS Desktop9.3破解安装(for microsoft .net)
  7. Ajax(5)UpdatePanel的使用方法
  8. 解决Winform程序在不同分辨率系统下界面混乱问题
  9. 怎么让datagridview中的某一行不可编辑
  10. python多线程返回值_python获取多线程及子线程的返回值