Koa2框架

koa-generator

安装(-g 全局安装的意思)

npm install -g koa-generator

创建项目
koa2 project
//或者
koa2 -e project

然后初始化项目

npm i

使用npm run dev运行会监听实时更新 因为执行了nodemon

async和await语法

1.如果代码有async声明一个函数,这个函数是异步的。如果外部没有声明async,里面不能使用await.反之则声明了async里面可以没有await。
2.async和new Promise的区别是,Promise有多个事情,比如a,b,c通过a.then.then去处理b和c事情。而async是类似写成同步的样子,如下面代码//2这部分,a,b,c都是异步的过程,a的结果 等于这个a执行完,拿到是执行完的结果,在拿到结果之前不会运行下面的语句,而会等待。所以async就等于用同步的写法,完成异步的过程。

router.get('/', async (ctx, next) => {
  const a = await A;//2 伪代码
  const b = await B;//2 伪代码
  const c = await C;//2 伪代码
  await ctx.render('index', {
    title: 'Hello Koa 2!'
  })
})

3.用async声明一个异步函数,

异步的概念

就是先执行第一句console.log('start'),然后要等待异步返回resolve('a'),最后才执行下面的ctx.body={a},所以刷新浏览器接口的时候会卡顿了大概1秒左右,就是因为await会等待结果,才执行最后的返回body的代码。如果把await去掉,就会先执行第一句,然后输出最后一句,最后浏览器返回body的a就是没有内容的。再执行倒计时里面的,这样就没意义了。这样写起来就类似同步的方法,没有.then这样链式写下去。const a 的结果 就是resolve('a')返回的结果.如果await后面跟这不是Promise对象,也会自动帮你转换成Promise对象(所以const b = await Promise.resolve(123)也是可以的)。所以用async和await就可以让异步的过程,按照我们的顺序去执行。因为我们有时需要等待a返回的结果,才执行最后的代码,这样写起来就没有异步回调的做法。比较简洁。
理解asynv和await


image.png

image.png

这种就是多个回调的写法,按顺序执行的,一共耗时3秒,中间那个忽略不算因为是直接输出的。
await是按顺序执行下去的。

koa2中间件

koa2中间件的原理
1.request是浏览器发出的请求
2.response响应给浏览器的结果
3.中间件引入是有顺序的,引用的时候没有顺序。要理解引用的顺序不一样,执行的结果一样。
4.中间件一定要加await next(),不然下面的中间件不会执行,直接跳出


image.png

原理是一进一出,先进后出,就不怕里面设置变量可能会被下个中间件改掉。因为最后还是会触发你那里的函数,可以检查她是否改掉,改掉还可以改回来。
m1,m2,m3文件代码如下,最后输入如下图,所以打印出来的 如上面的洋葱图一样。


image.png
image.png

中间件demo

// app.js 文件内容
const pv = require('./middleware/koa-pv')//引入中间件
app.use(pv())//使用中间件,里面的调用函数的意思
// ./middleware/koa-pv文件内容
//ctx是进入app的一个对象,会全局挂载着所有的信息,包括两方面(req,res的信息)。整个app都能拿到的全局对象,用来维持req和res两边的信息
function pv(ctx){
  global.console.log('pv',ctx.path)
}
//最后一定要把你的处理结果导出,且导出是一个函数(为什么是函数,因为app.use(pv()),里面就是调用函数的意思)
module.exports=function(){
  //这个函数必须返回一个异步的
  return async function(ctx,next){
    //ctx的信息可以在官网的上下文Context中查看对于的属性
    pv(ctx)
    //当前这个中间件处理完毕后,交给下一个中间件
    await next() //代表洋葱里面执行下一个圈,否则会跳出
  }
}

//app.js文件添加
app.use(pv())//使用中间件

自定义koa2中间件


image.png

一定要写await next() 执行下一个中间件

koa2路由

const router = require('koa-router')() //引用这个中间件,生成一个实例
//实例上会有下面的两个方法
//router.get()
//router.post()
//这是渲染页面的
router.get('/',async(ctx,next)=>{
  await ctx.render('index',{
    title:'Hello Koa 2!'
  } )
})
//这是返回接口的
router.get('/',async(ctx,next)=>{
  ctx.body={
    title:'koa2 json'
  }
})
//ctx.body='koa2 string' //如果里面写这样就是返回字符串,上面那个是返回json数据
----------------------------------------------------------------------------------
//在routers文件下users.js
router.prefix('/users') //意思就是要在url前缀加上/users/bar才可以访问
router.get('/bar',async(ctx,next)=>{
  ctx.body={
    title:'koa2 json'
  }
})
//最后一定要导出
module.exports = router

--------------------------------------------------------------------------------
//app.js引用
const users = require('./routers/users') //导入
app.use(users.routers(),users.allowedMethods()) //使用这个中间件

cookie和session

1.访问首页就注入一个cookie,叫pvid,用浏览器f12可以查看到
2.访问json接口可以读取到刚才设置的cookie


image.png

一个写入,一个读取

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

推荐阅读更多精彩内容

  • 4.处理数据 处理数据使用koa-better-body中间件 处理get数据:ctx.request.query...
    Yytg阅读 1,681评论 0 3
  • 阅读这篇文章,你不需要听过 koa 框架,你甚至不需要使用过 node,你只需简单看懂 js。相信每一个具有 we...
    大前端艺术家阅读 1,456评论 0 4
  • 一个常见app的框架, 实现一些常用功能 TabBarController + NavigationBarCont...
    ios___developer阅读 443评论 0 0
  • 2017年12月25日,我的爸爸去世了。从那天起,我发觉我变得很冷静很冷漠,想哭,却无处可哭,这条软肋,也不敢被任...
    潘小某的日常阅读 537评论 0 0
  • “不着急”说的是对时间的态度。一个人做完该做的努力之后,就该放下,手里放下,心里放下,等。有耐心,有定力,给自己足...
    姓李名恒阅读 512评论 0 0