介绍

A lightweight, scalable for agile development Node.js web framework, based on koa2.

ThinkKoa - 轻量级可扩展的敏捷开发Node.js框架,支持ES6/7全新特性,支持Koa、Express中间件,基于koa2。

特性

  • 基于koa2

ThinkKoa基于著名的Node.js框架koa2进行了薄封装。扩展了Koa的功能,能够迅速的进行Web开发。

  • 支持Koa/Express中间件

通过简单的引入机制,ThinkKoa可以很好的支持Koa中间件(包括Koa1及Koa2)。还提供了useExp()来使用Express的中间件。大大提升了框架的扩展性及开源模块利用率。

  • 为敏捷开发而生

ThinkKoa是在ThinkKoa团队3年的Node.js项目开发积累中酝酿诞生的,以提升团队开发效率、助力敏捷开发为目的。框架经过公司多个互联网产品上线、迭代以及大流量大并发的考验。

  • 支持多种项目结构和多种项目环境

ThinkKoa默认支持单模块模式,适合简单快速的项目。业务复杂的项目,可以开启多模块支持,功能划分更加清晰。ThinkKoa支持Nginx代理以及pm2部署,适合对稳定性和效率有要求的生产环境。

  • 支持灵活的自定义路由

ThinkKoa除默认的单模块模式(controller/action)及多模块模式(module/controller/action)路由规则以外,还支持用户定制路由。在项目中增加路由文件配置即可灵活的支持Restful等各种自定义路由。

  • 拥抱Node.js 8 LTS, 使用 ES6 特性来开发项目

使用 async/await 等一系列新特性,让Node.js开发变得赏心悦目。

  1. const {controller, helper} = require('thinkkoa');
  2. const user = require('../model/user.js');
  3. //user controller, controller/user.js
  4. module.exports = class extends controller {
  5. //login action
  6. async loginAction(){
  7. //If it is a get request, the login page is displayed directly
  8. if(this.isGet()){
  9. return this.render();
  10. }
  11. //Obtaining data by post method
  12. let name = this.post('username');
  13. if (helper.isEmpty(name)) {
  14. return this.fail('username is required');
  15. }
  16. let userModel = new user(this.app.config('config.model', 'middleware'));
  17. //Username matches the corresponding entries in the database.
  18. let result = await userModel.where({name: name, phonenum: {"not": ""}}).find();
  19. if(!result){
  20. return this.fail('login fail');
  21. }
  22. //Written into session
  23. await this.session('userInfo', result);
  24. return this.ok('login success');
  25. }
  26. }

上面的代码我们使用了 ES6 里的 class, let 以及 async/await 等特性,虽然查询数据库和写入 Session 都是异步操作,但借助 async/await,代码都是同步书写的。

关于 ES6/7 特性可以参考下面的文档:

性能测试

框架版本Thread Stats AvgThread Stats MaxReq/Sec AvgReq/Sec MaxRequests/secTransfer/secTotal Rqueststimeout
koa2.215.37ms83.36ms1.87k2.14k6357.211.18MB2019760
express4.15.217.48ms123.20ms1.44k2.01k5742.441.16MB1723970
thinkkoa1.3.019.38ms105.21ms1.28k1.76k5166.331.17MB1553110
thinkjs2.2.1843.06ms108.78ms583.310.87k2319.06448.42KB697760
sails0.1283.24ms283.96ms306.42505.001204.45601.58KB362250
laravel5.2.15 (php7)93.01ms472.31ms261.44694.001198.23335.75KB209874
laravel5.2.15 (php5)390.06ms1.23s91.24276.00287.07110.57KB764832
  1. 注:
  2. 1、表中测试koaexpress均未加载中间件
  3. 2、测试环境 Mac Prowrk -t4 -c100 -d30s http://127.0.0.1:3000
  4. 3、取10次测试平均值

从表中测试数据可以看到:

1、ThinkKoa性能略次于Koa2以及Express,但差距很小。这是因为ThinkKoa默认加载了trace、static、cookie、payload、router、controller等常用的中间件,Express或者Koa在加载同等功能的中间件后,性能和ThinkKoa持平。

2、ThinkKoa用很小的性能损失换来项目敏捷开发,并且结构和规范合理,适合开发大的项目。

3、ThinkKoa的中间件都是经过在线互联网产品项目实战检验的,相对比其他的开源的中间件,安全和稳定性有保障。