目录

环境搭建

async和await语法

Koa中间件

Koa的路由

Cookies和Session

Redis(高速读写)

安装

session运用Redis

终端查询Redis

跳过session用Redis


环境搭建

  1. 全局安装koa2脚手架,终端输入:sudo npm install -g koa-generator;
  2. 创建项目:koa2 -e koa2-learn;(-e:ejs,koa2-learn:文件夹名字)

注:复制: DEBUG=koa2-learn:* npm start,可运行项目

      3.在创建的文件夹下安装npm:npm install

注:若提示Pass --update-binary to reinstall,再次执行npm install --update-binary

     4.终端执行:DEBUG=koa2-learn:* npm start,端口号3000,运行项目

     5.在package.json中启动项目

"scripts": {
"start": "node bin/www",
"dev": "./node_modules/.bin/nodemon bin/www",
"prd": "pm2 start bin/www",
"test": "echo \"Error: no test specified\" && exit 1"
},
npm start;npm run dev(可实时自启动);npm run prd;npm test;
注:
global.console.log('index')//koa2中global相当于vue中的window

async和await语法

在routes目录下的index新建接口,浏览器访问3000/asaw:

//新建接口
//await在async中才起作用,且返回的是Promise对象,
//若无await下面返回的是空值
router.get('/asaw',async(ctx)=>{//箭头函数
global.console.log('start',new Date().getTime())
const a = await new Promise((resolve,reject)=>{//
setTimeout(function () {
global.console.log('async a',new Date().getTime())
resolve('zou')
},1000);
})
const b = await 11
const c = await new Promise((resolve,reject)=>{
setTimeout(function () {
global.console.log('async c',new Date().getTime())
resolve('zouzou')
},2000);
})
ctx.body={//render在视图上
a,b,c
}
})
// "a": "zou",
// "b": 11,
// "c": "zouzou"

 

Koa中间件

  1. 创建中间件文件koa-pv.js
function pv(ctx) {
global.console.log('pv'+ctx.path)
}
//中间件输出
module.exports=function () {
return async function (ctx,next) {//异步
pv(ctx)
await next()//交给下一个中间件处理,
// 等下一个中间件处理结束返回再执行await下行代码,类似栈
}
}
1. 中间件在app.js 中引入与使用
const pv = require('./middleware/koa-pv')//导入中间件
app.use(pv())//使用中间件

Koa的路由

分模块路由

const router = require('koa-router')()
 
router.prefix('/users')//在3000/users/模块下访问下面路由
router.get('/', function (ctx, next) {
ctx.body = 'this is a users response!'
})
router.get('/bar', function (ctx, next) {
ctx.body = 'this is a users/bar response'
})
module.exports = router//路由导出
App.js中路由搭载
// routes
app.use(index.routes(), index.allowedMethods())//路由搭载
app.use(users.routes(), users.allowedMethods())

Cookies和Session

cookies设置:ctx.cookies.set('name', 'tobi', { signed: true });

在index设置在3000/下中例

ctx.cookies.set('pvid',Math.random())//cookies设置
cookies读取:ctx.cookies.get(‘name’)
在3000/json读例:
router.get('/json', async (ctx, next) => {
ctx.body = {
title: 'koa2 json',
cookie: ctx.cookies.get('pvid')//打印cookies
}
})

Redis(高速读写)

定义:Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

 

它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

安装

1. 安装Redis:brew install redis,安装成功
2. 查看版本:brew search redis
3. 运行:redis-server,运行成功:

koa2链接redis koa redis_koa2链接redis

session运用Redis

1.在项目目录下安装中间件koa-generic-session与koa-redis:

npm i koa-generic-session koa-redis  安装成功

koa2链接redis koa redis_koa2链接redis_02

  1. 在app.js引入中间件
const session = require('koa-generic-session')//导入npm搭载的中间件
const Redis = require('koa-redis')//导入redis数据库中间件

3.使用Redis、session

//使用redis
app.keys=['keys','keyskeys']//加密处理了,任意输入即可
app.use(session({
key:'mt',//改变cookies中的name
prefix:'mtpre',//改变前缀
store:new Redis()//链接数据库
}))
1. 在任意中间件方法中添加语句记录用户访问次数
ctx.session.count++//用户访问多少次,会在cookies中加入

此时在网页上的cookies上出现两个mt与mtpre

终端查询Redis

1.查询keys:先终端执行:redis-cli,进入端口,在执行:keys *;查看

2.得到在上例中添加到Redis的count:get key(这里的key从keys中拷贝)

跳过session用Redis

  1. 在路由接口users.js实现,导入Redis中间件

const Redis = require('koa-redis')//导入

  1. 新建接口
//新建接口:Redis存储
router.get('/fix',async function (ctx) {//与数据库相关用异步
//存储key:fix,值为random
const st = await Store.hset('fix','name',Math.random())
//提示程序完成,终端打印
ctx.body={code:0}
})
1. 终端打印值。先终端请求网址:curl http://localhost:3000/users/fix

2. 在127.0.0.1:6379> 下执行:hget fix name,得到存储值