目录
环境搭建
async和await语法
Koa中间件
Koa的路由
Cookies和Session
Redis(高速读写)
安装
session运用Redis
终端查询Redis
跳过session用Redis
注:复制: 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
在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"
function pv(ctx) {
global.console.log('pv'+ctx.path)
}
//中间件输出
module.exports=function () {
return async function (ctx,next) {//异步
pv(ctx)
await next()//交给下一个中间件处理,
// 等下一个中间件处理结束返回再执行await下行代码,类似栈
}
}
const pv = require('./middleware/koa-pv')//导入中间件
app.use(pv())//使用中间件
分模块路由
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设置: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是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
1.在项目目录下安装中间件koa-generic-session与koa-redis:
npm i koa-generic-session koa-redis 安装成功
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()//链接数据库
}))
ctx.session.count++//用户访问多少次,会在cookies中加入
此时在网页上的cookies上出现两个mt与mtpre
1.查询keys:先终端执行:redis-cli,进入端口,在执行:keys *;查看
2.得到在上例中添加到Redis的count:get key(这里的key从keys中拷贝)
const Redis = require('koa-redis')//导入
//新建接口:Redis存储
router.get('/fix',async function (ctx) {//与数据库相关用异步
//存储key:fix,值为random
const st = await Store.hset('fix','name',Math.random())
//提示程序完成,终端打印
ctx.body={code:0}
})