接口中作建立实例redis
# npm in mongoose # mkdir dbs # mkdir dbs/models # touch dbs/models/person.js # touch dbs/config.js
config.js=》数据库地址
mongodb
module.exports = { dbs: 'mongodb://127.0.0.1:27017/dbs' }
person.js=》先声明Schema,在数据库中声明一个表,建立模型,在模型中建实例
数据库
const mongoose = require('mongoose') const personSchema =new mongoose.Schema({ name:String, age:Number }) module.exports=mongoose.model('Perosn',personSchema)
app.js=>引入mongoose和数据库地址,进行链接
npm
const mongoose = require('mongoose') const dbConfig = require('./dbs/config') mongoose.connect(dbConfig.dbs, { useNewUrlParser: true })
routes/users.js
cookie
const router = require('koa-router')() // 引入模型 const Person = require('../dbs/models/person') router.prefix('/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' }) // 新增 router.post('/addPerson', async function (ctx) { const person = new Person({ name: ctx.request.body.name, age: ctx.request.body.age }) let code; try { await person.save() code = 0; } catch { code = -1; } ctx.body = { code: code } }) // 删除 router.post('/removePerson', async function (ctx) { let resa = await Person.where({ name: ctx.request.body.name }).remove() let code; try { code = 0; } catch (error) { code = -1; } ctx.body = { code: code } }) // 修改更新 router.post('/updatPerson', async function (ctx) { await Person.where({ name: ctx.request.body.name }).update({ age: ctx.request.body.age }) ctx.body = { code: 0 } }) // 查询 router.post('/findPerson', async function (ctx) { let resonlv1 = await Person.findOne({ name: ctx.request.body.name }) let resonlv2 = await Person.find({ name: ctx.request.body.name }) ctx.body = { code: 0, resonlv1, resonlv2 } }) module.exports = router
终端启动请求接口
session
# curl=》发起请求;-d =》post请求 # 新增 curl -d "name=youzi&age=18" http://localhost:3000/users/addPerson # 删除 curl -d "name=youzi" http://localhost:3000/users/removePerson # 更新修改 curl -d "name=youzi" http://localhost:3000/users/updatPerson # 查新 curl -d "name=youzi" http://localhost:3000/users/findPerson
提及咱们平时工做中常开发的登录功能,服务端的程序是如何识别客户端的状态呢?HTTP是无状态的,用户访问了咱们服务端的程序,怎么保证下次访问的时候仍是这个用户呢?服务端的session又是如何保持在客户端呢?
app
app.js引入2个中间件,进行开发
dom
const session = require('koa-generic-session') const Redis = require('koa-redis') app.keys = ['keys', 'keyskyes']; //对session进行加密,这里是值本身定哦 app.use(session({ store:new Redis() //不写配置项内容存进内存,这里咱们存到redis中 }))
koa-pv.js中间件
koa
# 这里记录pv数加加。将session和当前用户访问进行关联 # 将session的值存在cookie中,区分不一样的用户身份 function pv(ctx) { ctx.session.count++ global.console.log('pv' + ctx.path) } module.exports = function () { return async function (ctx, next) { pv(ctx) await next() } }
此时刷新页面查看。cookie中已经有咱们刚存进去的值了koa开头的就是咱们储存进去的内容,这里koa开头的key值咱们是能够去修改的。经过key和前缀prefix设置便可,用法以下
curl
app.use(session({ key: 'mt', prefix: 'mtpr', store: new Redis() }))
接口中写入
const Redis = require('koa-redis') const Store = new Redis().client; router.get('/fix', async function (ctx) { const st = await Store.hset('fix', 'nanme', Math.random()) ctx.body = { code: 0 } }) # 直接请求便可。由于是get,哈哈哈哈 # url http://localhost:3000/users/fix # 去redis中查询就能看到咱们刚才建立的值啦