1.koa是一个基于nodeJs的web框架,其由express原班人马打造 主要针对于api开发,通过利用es6中的async函数,让你丢掉回调函数的,并且增强了错误处理,koa没有任何中间键的参与,只是让您更快的编写服务器应用程序。
2.使用bable实现async函数,要想编译async方法你至少应该有 transform-async-to-generator和transform-async-to-module-method插件
./babelrc
{
"plugin":["transform-async-to-generator"],
}
3.koa应用程序是一组包含中间件函数的对象,它按照堆栈的方式执行。
例子:
cons Koa=require("koa")
const app=new Koa();
app.use(async ctx=>{
ctx.body="hello ,word"
})
app.listen(3000)
4.koa调用下游,然后控制返回上游,叫级联,使用async方法能实现真实的中间件当一个中间件调用 next() 则该函数暂停并将控制传递给定义的下一个中间件。当在下游没有更多的中间件执行后,堆栈将展开并且每个中间件恢复执行其上游行为。
5.设置
(1) app.env 默认是node-env或者development
(2)app.proxy当真正的代理头字段被信任
(3)app.subdomainOffset 对于要忽略的 .subdomains 偏移[2]
- (1)app.listen(…)
const Koa=require(“koa”) const app=new Koa(); app.listen(300)<=>const
http=require(“http”)
app.createServer(app.callback()).listen(3000)
(2)app.use(function())将给定的中间件方应用程序法添加到 (3)app.callback()用来处理请求的
(4)app.keys=设置签名的cookies密匙
(5)app.context是其ctx的原型,通过编辑app.content为ctx添加属性,tx 上的许多属性都是使用 getter
,setter 和 Object.defineProperty() 定义的。你只能通过在 app.context 上使用
Object.defineProperty() 来编辑这些属性
7错误处理
默认情况下是将所有的错误都输出到stderr,除非app.slient为true,要执行自定义错误处理逻辑,如集中式日志记录,您可以添加一个 “error” 事件侦听器:
app.on(err,err=>{
log.error("errlog",err)
})
如果 req/res 期间出现错误,并且 _无法_ 响应客户端,Context实例仍然被传递:
app.on('error', (err, ctx) => {
log.error('server error', err, ctx)
});
8.上下文(Content)ctx封装了两个对象一个是request一个是response对象
API
1.ctx.req node的req对象
2.ctx.res 避免使用下列属性 node 的res对象
res.statusCode
res.writeHead()
res.write()
res.end()
3.ctx.request koa的request对象
4.ctx.response koa的response对象
5.ctx.state指定命名空间通过中间件传递信息和前端视图
ctx.state.app=await User.find(id)
6.ctx.app应用程序
7.ctx.cookies.get(name,[options])
通过 options 获取 cookie name:
signed 所请求的cookie应该被签名
8.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 标头中过滤掉。
9.ctx.throw([status], [msg], [properties])
ctx.throw(400, 'name required', { user: user });