以express的方式学习koa

假定你是一个熟悉express的nodejs工程师

  • 熟悉nodejs
  • 熟悉expressjs
  • 想快速学习koa

什么是koa?

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

http://koajs.com/

更多中间件,上下文,异常处理等,详见Koa or Express

express和koa比较

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

Feature Koa Express Connect
Middleware Kernel
Routing
Templating
Sending Files
JSONP

这是一份很久以前的文档,目前来看也是对的,但是koa的生态已经很好了

Feature Koa Express Connect
Middleware Kernel
Routing ✓ koa-router
Templating ✓ koa-views
Sending Files ✓ koa-send
JSONP ✓ koa-safe-jsonp

该有的基本都有了,于是我仿着express-generator写了koa-generator

技术栈如下

生成器

generator是生成器的意思,用于生成项目骨架,express-generator就是一个比较好的例子,虽然比较精简,但结构清晰,足矣满足一帮性需求

鉴于很多人非常熟悉expressjs,我就假定大家也熟悉express-generator

express-generator提供的功能

  • 生成项目骨架
  • 约定目录结构(经典,精简,结构清晰)
  • 支持css预处理器

express-generator提供的功能

  • 生成项目骨架
  • 约定目录结构(和express-generator的结构一模一样)
  • 支持css预处理器(暂未实行)

2个生成器共同的项目骨架结构

  • app.js为入口
  • bin/www为启动入口
  • 支持static server,即public目录
  • 支持routes路由目录
  • 支持views视图目录
  • 模式jade模板引擎

用法

目前已经支持1.x和2.x版本

  1. npm install -g koa-generator

然后使用koa命令创建koa 1.x项目
然后使用koa2命令创建koa 2.x项目

当前目录创建,如果非空需要加force选项

  1. koa

创建项目目录

  1. koa helloworld

实例

  1. koatest koa helloworld
  2. create : helloworld
  3. create : helloworld/package.json
  4. create : helloworld/app.js
  5. create : helloworld/public
  6. create : helloworld/public/javascripts
  7. create : helloworld/public/images
  8. create : helloworld/public/stylesheets
  9. create : helloworld/public/stylesheets/style.css
  10. create : helloworld/routes
  11. create : helloworld/routes/index.js
  12. create : helloworld/routes/users.js
  13. create : helloworld/views
  14. create : helloworld/views/index.jade
  15. create : helloworld/views/layout.jade
  16. create : helloworld/views/error.jade
  17. create : helloworld/bin
  18. create : helloworld/bin/www
  19. install dependencies:
  20. $ cd helloworld && npm install
  21. run the app:
  22. $ DEBUG=helloworld:* npm start

1.png

  1. koatest cd helloworld
  2. helloworld npm install
  3. helloworld npm start

此时访问

路由写法说明

只要是koa-router写的路由都可以加载的,加载方式和express里一样

  1. var router = require('koa-router')();
  2. router.get('/', function *(next) {
  3. this.body = 'this /1!';
  4. });
  5. router.get('2', function *(next) {
  6. this.body = 'this /2!';
  7. });
  8. module.exports = router;

一定要区分

  1. url = /2
  2. router.get('2', function *(next) {
  3. this.body = 'this /2!';
  4. });
  1. url = //2
  2. router.get('/2', function *(next) {
  3. this.body = 'this /2!';
  4. });

这个是koa-router的一个问题,和express里的路由稍有不一样,注意一些即可

koa-generator

项目地址 https://github.com/17koa/koa-generator/

分支

  • master是生成器,里面的templates目录放模板
  • tpl是项目模板

欢迎fork、star或issue,O(∩_∩)O谢谢

总结

打通了express-generator和koa-generator玄关后,剩下的就是习惯koa的语法,整个世界就更简单了

另外项目骨架的好处是约定技术栈,你可以在上面基础上做更多更有意思的事儿

提前报个料moajs很快会放出一个基于koa的版本来