Koa介绍
koa 是由 Express 原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的 Web 框架。使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升错误处理的效率。koa 不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手。
安装
cnpm install koa-generator -g
npm install koa
应用程序
Koa应用程序是一个包含一组中间件函数的对象,它是按照类似堆栈的方式组织和执行的。
一个关键的设计点是在其低级中间件层中提供高级“语法糖”。
这提高了互操作性,稳健性,并使书写中间件更加愉快。
包括诸如内容协商,缓存清理,代理支持和重定向等常见任务的方法。
const Koa=require('koa'); const app=new Koa(); app.use(ctx=>{ ctx.body='Hello Koa'; }) app.listen(3000);1234567
级联
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) });1234
上下文Context
Koa Context将node的request和response对象封装到单个对象中,为编写Web应用程序和API提供了许多有用的方法。
每个请求都将创建一个Context,并在中间件中作为接收器引用
app.use(async ctx => { ctx; // 这是 Context ctx.request; // 这是 koa Request ctx.response; // 这是 koa Response });12345
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服务器开发有用的功能。
合智互联客户成功服务热线:400-1565-661
留言评论
暂无留言