koa框架

1. 环境依赖

  • 最新的koa建议使用es6,await, async;所以我们这里的环境使用node v8.0.0
nvm install v8.0.0
npm i koa -D 

2. hello world

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

app.use(async ctx=> {
    
    ctx.body = "Hello world"
})

app.listen(3000);

3. 中间件执行流程

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

app.use(async (ctx, next)=> {
    
    await next();
    console.log(111)
})

app.use(async ctx => {

    ctx.body = "到底了";
    console.log(22);
})

app.listen(3000);

//打印结果
//22
//111

ps: 执行流程是,中间件从上到下执行;当某个中间件遇到了await,会停止await下面的代码,转而执行下一个中间件,直到最后一个中间件执行完了,或者某个中间没有await,则执行流程将回流,回复其上游行为

4. app.listen(...)

  • 创建并返回HTTP服务器
const Koa = require('koa")
const app = new Koa();
app.listen(3000)

ps: 以上就创建了一个简单的http服务器

5. app.use(...)

-添加一个中间件,也可以放入第三方中间件模块

app.use(async (ctx, next)=> {
    
    await next();
    ctx.body="hello world"
})

6. app.context

  • 是创建ctx的原型,可以在app.context上面添加属性,在ctx可以获取到
app.context.name= 'weixin';
app.use(async ctx => {
    console.log(ctx.name);
})

7. 错误处理

  • 默认当发生错误的时候,所有错误会输出到stderr,作为输出流输出到屏幕中;我们可以添加’error‘监听器,当发生错误的时候,将错误信息记录出来
app.on('error', (error, ctx) => {

   log.error('server error', err, ctx)
})

8. 上下文(Context)

  • Koa Context将nodejs的requrest和response对象封装到单个对象中
  • 每个请求都会创建一个Context,并且在中间中作为形参ctx来引用
app.use(async ctx => {
    ctx; //这是每个请求过来创建的Context
    ctx.request; //这是requrest
    ctx.response; //这是response
})

9. ctx上面的属性

ctx.req //node的request,没有经过处理
ctx.res //node的response
ctx.request //Koa的requrest
ctx.response //Koa的response
ctx.state //命名空间,用来传递中间件传递信息和前端视图  
ctx.state.userInfo = await getUserInfo();
ctx.app //应用实例的引用
....

Koa Request

  • 该对象是对node的request的抽象封装,包含以下属性

request.header //请求头
request.header= //设置请求头
request.method //请求方法
request.length //以数字返回请求里面的Content-Length
request.url //获取请求的url
requret.url = //设置请求url, 对url重写有用
request.origin //获取url的来源,包括protocol和host
ctx.request.origin => http://test.com
request.href //获取完整的url,包括protocal,host,url
ctx.request.href => http://test.com/foo/bar?q=1
request.path // 获取请求路劲
request.querystring //获取查询字符串
request.host //获取当前主,当app.proxy设置为true时支持X-Forwarded-Host, 否则使用Host
request.type //获取请求Content-type,不包含参数charset
const ct=ctx.request.type => image/png
request.charset //获取请求字符集
ctx.request.carset => 'utf-8'
request.query //获取解析后的查询字符串

color=blue&size=small
得到的是
{
color: 'blue',
size: 'small'
}

request.protocol //返回请求协议
request.ip //返回远程地址, 当app.proxy是true时支持X-Forwarded-Proto.

ps: 可以参考这里https://koa.bootcss.com/

ctx.request对象里面属性的别名

ctx.header
ctx.headers
ctx.method
ctx.method=
ctx.url
ctx.url=
ctx.originalUrl
ctx.origin
ctx.href
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()

ctx.response对象里面属性的别名

ctx.body
ctx.body=
ctx.status
ctx.status=
ctx.message
ctx.message=
ctx.length=
ctx.length
ctx.type=
ctx.type
ctx.headerSent
ctx.redirect()
ctx.attachment()
ctx.set()
ctx.append()
ctx.remove()
ctx.lastModified=
ctx.etag=
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352