koa 2.0 - Context

koa 2.0 系列:

在介绍篇时,提到过 Web Framework 的最重要的作为就是处理 request & reponse。

koa 将 node 的 request & reponse 对象封装在一个新的对象中
context,并提供一些更简单的 API 方便调用。

Context 是在每一个 request

Koa1 在调用时,使用的是 this,而 koa2 则是 ctx。

1
2
3
4
5
// Koa2
app.use(async (ctx, next) => {
ctx.body = 'hello world'
await next()
})

## API

Context 提供的一些方法和 accessors(访问器)。

ctx.req

node request 对象,被封装到了 ctx.req

ctx.res

node response 对象,被封装到了 ctx.res

ctx.request

koa 的 Request 对象。是对 node 的 request 进一步抽象和封装,提供了日常 HTTP 服务器开发中一些有用的功能。

ctx.response

koa 的 Response 对象,是对 node 的 response 进一步抽象和封装,提供了日常 HTTP 服务器开发中一些有用的功能。

ctx.cookies

1
2
ctx.cookies.get(name, [options])
ctx.cookies.set(name, value, [options])

ctx.state

可以通过 State 向前端 View 传递数据:

1
this.state.user = await User.find(id);

ctx.app

Application 实例的指针。


## cxt 访问器

context 提供一些 alias & accessors 以方便更快操作 request & response。

Request aliases

  • 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()

Response aliases

  • ctx.body
  • ctx.body=
  • ctx.status
  • ctx.status=
  • ctx.length=
  • ctx.length
  • ctx.type=
  • ctx.type
  • ctx.headerSent
  • ctx.redirect()
  • ctx.attachment()
  • ctx.set(field, value) // 设置 response header 字段 field 的值为 value。
  • ctx.remove()
  • ctx.lastModified=
  • ctx.etag=

REF::

https://segmentfault.com/a/1190000006085240
https://segmentfault.com/a/1190000006145114