koajs框架快速掌握

koa 是一个新的Web框架,其目的是为Web应用程序的API更精简,更具表现力,更坚实而设计。通过利用generator,koa让你不再面对回调,可大大增加错误处理能力。兴亚内没有捆绑任何中间件,提供了一个优雅的方法,使开发web程序更快速和愉快。

安装

node version > 0.11.x 

你可以安装 n 工具,这样可轻松安装node ,并在各版本轻松切换。

$ npm install -g n
$ n 0.11.13
$ node --harmony my-koa-app.js

这里通过--harmony 参数,让node支持 generator。

使用例子

下面是个例子:

var koa = require('koa');
var app = koa();

app.use(function *(){
  this.body = 'Hello World';
});

app.listen(3000);

运行后,浏览器访问 localhost:3000 可以看到 Hello World

中间件

koa的中间件类似express,但仅仅是类似,下面是个中间件例子:

var koa = require('koa');
var app = koa();

// logger 中间件
app.use(function *(next){
  var start = new Date;
  yield next;
  var ms = new Date - start;
  console.log('%s %s - %s', this.method, this.url, ms);
});

app.use(function *(){
  console.log(“first run”);
  this.body = 'Hello World';
});

app.listen(3000);

我们开发了 logger 中间件,浏览器访问  localhost:3000 在终端打印出:

first run
GET / - 6

为什么 first run 先运行了呢,因为 yield next这句,它会等待最终响应后,才继续它下面的语句。这种语法特色采用了 co 库风格,电子书相关章节介绍过了,这里不做过多解释。

错误处理

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

也可以传递 cxt 上下文对象,这样可以响应错误信息。

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

上下文对象

上下文对象封装了 request 和 response 对象,提供相关的方法,每次请求都会创建一个新的上下文对象。

app.use(function *(){
  this; // 上下文对象
  this.request; //  得到请求对象
  this.response; // 响应对象
});

很多请求和响应对象的方法,绑定到了上下文对象上。

request 请求对象属性与方法:

  • ctx.header

  • ctx.method

  • ctx.method=

  • ctx.url

  • ctx.url=

  • ctx.originalUrl

  • ctx.path

  • ctx.path=

  • ctx.query

  • ctx.query=

  • ctx.querystring

  • ctx.querystring=

  • ctx.host

  • ctx.hostname

  • ctx.fresh

  • ctx.stale

  • ctx.socket

  • ctx.protocol

  • ctx.secure

  • ctx.ip

  • ctx.ips

  • ctx.subdomains

  • ctx.is()

  • ctx.accepts()

  • ctx.acceptsEncodings()

  • ctx.acceptsCharsets()

  • ctx.acceptsLanguages()

  • ctx.get()

这些属性可以通过 this.url 调用,也可通过 this.req.url 方式调用。这些属性和express一样,这里不过多介绍。

response 响应对象的方法

  • ctx.body

  • ctx.body=

body是响应的内容,它可以设置 String / Buffer / JSON 类型

  • ctx.status

  • ctx.status=

  • ctx.length=

  • ctx.length

  • ctx.type=

  • ctx.type

  • ctx.headerSent

  • ctx.redirect()

  • ctx.attachment()

  • ctx.set()

  • ctx.remove()

  • ctx.lastModified=

  • ctx.etag=

可参看 : http://koajs.com/koa中间件: https://github.com/koajs/koa/wiki#middlewarethis

掌握了express也就等于掌握了koa。相对来说,express 更成熟,koa更新颖快捷,可根据自身,选择开发框架。