Koa

Koa

基于node.js平台的下一代web开发框架。
由Express幕后的原班人马打造,致力于成为web应用和API开发领域中的一个更小、更富有表现力、更健壮的基石。
通过利用async函数,Koa帮你丢弃回调函数,并有力的增强错误处理。
Koa并没有捆绑任何中间件,而是提供了一套优雅的方法,帮助您快速愉快的编写服务端应用程序。

安装

npm install koa

koa依赖于node v7.6.0或ES2015及更高版本和async方法的支持。

使用Babel实现Async方法

要解析和编译 async 方法, 你至少应该有 transform-async-to-generator 或 transform-async-to-module-method 插件

在.bablerc文件中配置:

       {
		  	"plugins": ["transform-async-to-generator"]
		}
		或
		{
		  "presets": [
		    ["@babel/preset-env", {
		      "targets": {
		        "node": true
		      }
		    }]
		  ]
		}
应用程序

Koa应用程序是一个包含一组中间件函数的对象,它是按照类似堆栈的方式组织和执行的。

一个关键的设计点是在其低级中间件层中提供高级“语法糖”。
这提高了互操作性,稳健性,并使书写中间件更加愉快。

包括诸如内容协商,缓存清理,代理支持和重定向等常见任务的方法。

const Koa=require('koa');
const app=new Koa();

app.use(ctx=>{
	ctx.body='Hello Koa';
})
app.listen(3000);
级联

Koa调用下游,然后控制流回上游。

设置

应用程序设置是app实例上的属性,目前支持如下:

  • app.env默认是NODE_ENV或“development”
  • app.keys签名的cookie密钥数组
  • app.proxy当真正的代理头字段将被信任时
  • 忽略.subdomains的app.subdomainOffset偏移量,默认是2
  • app.proxylpHeader代理ip标头,默认为X-Forwarded-For
  • app.maxIpsCount从代理ip标头读取的最大ips,默认为0(代表无限)

然后将设置传递给构造函数
```
const Koa = require(‘koa’);
const app = new Koa({ proxy: true });

```
app.listen(…)

koa应用程序不是Http服务器1对1展现,可以将一个或多个Koa应用程序安装在一起以形成具有单个HTTP服务器的更大应用程序。

app.callback()

返回适用于http.createServer()方法的回调函数来处理请求,也可以使用此函数将koa应用程序挂载到Connect/Express应用程序中。

app.use(function)

将给定的中间件方法添加到应用程序。

app.keys=

设置签名的cookie密钥。

app.context

通过编辑context为ctx添加其他属性。

【注意】:

  • ctx上的许多属性都是使用getter,setter和Object.defineProperty()定义的
  • 安装的应用程序目前使用其父级的ctx和设置。因此,安装的应用程序只是一组中间件。
错误处理
自定义错误处理
app.on('error', err => {
  log.error('server error', err)
});
上下文Context

Koa Context将node的request和response对象封装到单个对象中,为编写Web应用程序和API提供了许多有用的方法。

每个请求都将创建一个Context,并在中间件中作为接收器引用

app.use(async ctx => {
  ctx; // 这是 Context
  ctx.request; // 这是 koa Request
  ctx.response; // 这是 koa Response
});
API

Context具体访问方法和访问器

ctx.req

Node的request对象

ctx.res

Node的response对象

绕过koa的response处理是不被支持的,应避免使用以下node属性:

  • res.statusCode
  • res.writeHead()
  • res.write()
  • res.end()
ctx.request

Koa的Request对象

ctx.response

Koa的Response对象

ctx.state

推荐的命名空间,用于通过中间件传递信息和你的前端视图。

ctx.state.user = await User.find(id);
ctx.app

应用程序实例引用

ctx.app.emit

Koa应用扩展了内部EventEmitter,ctx.app.emit发出一个类型由第一个参数定义的事件。

ctx.cookies.get(name, [options])

通过options获取cookie name:
signed所请求的cookie应该被签名。

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

通过 options 设置 cookie name 的 value :

  • maxAge 一个数字表示从 Date.now() 得到的毫秒数
  • signed cookie 签名值
  • expires cookie 过期的 Date
  • path cookie 路径, 默认是’/’
  • domain cookie 域名
  • secure 安全 cookie
  • httpOnly 服务器可访问 cookie, 默认是 true
  • overwrite 一个布尔值,表示是否覆盖以前设置的同名的 cookie (默认是 false). 如果是 true, 在同一个请求中设置相同名称的所有 Cookie(不管路径或域)是否在设置此Cookie 时从 Set-Cookie 标头中过滤掉。
ctx.throw([status], [msg], [properties])

Helper方法抛出一个.status属性,默认为500的错误,这将允许Koa做出适当的响应。

允许以下组合:

ctx.throw(400);
ctx.throw(400, 'name required');
ctx.throw(400, 'name required', { user: user });
ctx.assert(value, [status], [msg], [properties])
ctx.assert(ctx.state.user, 401, 'User not found. Please login!');
ctx.respond

为了染过Koa内置response处理,可以显式设置ctx.respond=false。
如果想要写入原始的res对象而不是让Koa处理你的response,可以使用此参数。

请求Request

Koa Request对象是在node的vanilla请求对象之上的抽象,提供了诸多的Http服务器开发有用的功能。

API
响应Response

Koa Response对象是在node的vanilla请求对象之上的抽象,提供了诸多的Http服务器开发有用的功能。

API
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值