目录
环境搭建
async和await语法
Koa中间件
Koa的路由
Cookies和Session
Redis(高速读写)
安装
session运用Redis
终端查询Redis
跳过session用Redis
环境搭建
- 全局安装koa2脚手架,终端输入:sudo npm install -g koa-generator;
- 创建项目:koa2 -e koa2-learn;(-e:ejs,koa2-learn:文件夹名字)
3.在创建的文件夹下安装npm:npm install
注:若提示Pass --update-binary to reinstall,再次执行npm install --update-binary
4.终端执行:DEBUG=koa2-learn:* npm start,端口号3000,运行项目
5.在package.json中启动项目
"scripts": {npm start;npm run dev(可实时自启动);npm run prd; npm test;
"start": "node bin/www",
"dev": "./node_modules/.bin/nodemon bin/www",
"prd": "pm2 start bin/www",
"test": "echo \"Error: no test specified\" && exit 1"
},
注:
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中间件
- 创建中间件文件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下行代码,类似栈
}
}
- 中间件在app.js 中引入与使用
const pv = require('./middleware/koa-pv')//导入中间件Koa的路由 分模块路由
app.use(pv())//使用中间件
const router = require('koa-router')()App.js中路由搭载
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//路由导出
// routesCookies和Session cookies设置:ctx.cookies.set('name', 'tobi', { signed: true });
app.use(index.routes(), index.allowedMethods())//路由搭载
app.use(users.routes(), users.allowedMethods())
在index设置在3000/下中例
ctx.cookies.set('pvid',Math.random())//cookies设置cookies读取:ctx.cookies.get(‘name’)
在3000/json读例:
router.get('/json', async (ctx, next) => {Redis(高速读写) 定义:Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
ctx.body = {
title: 'koa2 json',
cookie: ctx.cookies.get('pvid')//打印cookies
}
})
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
安装
- 安装Redis:brew install redis,安装成功
文章图片
- 查看版本:brew search redis
- 运行:redis-server,运行成功:
文章图片
session运用Redis
1.在项目目录下安装中间件koa-generic-session与koa-redis:
npm i koa-generic-session koa-redis安装成功
文章图片
- 在app.js引入中间件
const session = require('koa-generic-session')//导入npm搭载的中间件3.使用Redis、session
const Redis = require('koa-redis')//导入redis数据库中间件
//使用redis
app.keys=['keys','keyskeys']//加密处理了,任意输入即可
app.use(session({
key:'mt',//改变cookies中的name
prefix:'mtpre',//改变前缀
store:new Redis()//链接数据库
}))
- 在任意中间件方法中添加语句记录用户访问次数
ctx.session.count++//用户访问多少次,会在cookies中加入此时在网页上的cookies上出现两个mt与mtpre
终端查询Redis
1.查询keys:先终端执行:redis-cli,进入端口,在执行:keys *;查看
2.得到在上例中添加到Redis的count:get key(这里的key从keys中拷贝)
跳过session用Redis
- 在路由接口users.js实现,导入Redis中间件
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}
})
- 终端打印值。先终端请求网址:curl http://localhost:3000/users/fix
- 在127.0.0.1:6379> 下执行:hget fix name,得到存储值
推荐阅读
- 数据库|HTQ ,全称 Http Task Queue ,是一个以Http方式执行异步任务的队列服务.
- #|Redis 学习 - 05 Node.js 客户端操作 Redis、Pipeline 流水线
- NodeJS|Node.js + Redis Sorted Set 实现简单的任务队列
- MySQL|【MySQL】MySQL的介绍及基础操作
- 数据库|数据库增删查改进阶
- MySQL学习|《MySQL学习笔记》数据库增删查改(进阶)
- redis|分布式锁(redis、zookeeper)
- 后端技术精进|分布式锁用 Redis 还是 Zookeeper
- C++后台开发|7 张图,轻松掌握零拷贝原理