Express 4.8.x—koajs框架快速掌握
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更新颖快捷,可根据自身,选择开发框架。