一、MongoDB入门
安装Mongoose
- brew tap mongodb/brew
- brew install mongodb-community
- brew services start mongodb-community
- 检查是否安装成功:which mongod
- 启动项目:mongod
- 这里mac系统可能会因为系统升级存在创建相关文件夹失败的错误的问题。这里只需先关闭SIP保护,在进行创建即可。
- 这里建议配合数据库工具去查看我们与数据库交互情况,Robo 3T
- 安装npm i mongoose
- 创建dbs文件夹,在内创件config.js来保存我们数据库地址。以及models文件夹,里面就是我们需要存储的信息
- 在app.js引入mongoose和数据库地址,进行连接。
-
接口中做创建实例
# npm in mongoose # mkdir dbs # mkdir dbs/models # touch dbs/models/person.js # touch dbs/config.js
-
使用Mongoose增删改查
config.js=》数据库地址
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和数据库地址,进行连接
const mongoose = require('mongoose') const dbConfig = require('./dbs/config') mongoose.connect(dbConfig.dbs, { useNewUrlParser: true })
routes/users.js
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
终端启动请求接口
# 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
二、Redis基础
-
session和cookie的关系?
说起我们平时工作中常开发的登陆功能,服务端的程序是如何识别客户端的状态呢?HTTP是无状态的,用户访问了我们服务端的程序,怎么保证下次访问的时候还是这个用户呢?服务端的session又是如何保持在客户端呢?
redis安装和使用?
- Mac下使用brew install redis
- 使用redis-server启动即可
- 进入项目,在项目内安装2个中间件(koa-redis、koa-generic-session)
redis配合session使用?
-
app.js引入2个中间件,进行开发
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中间件
# 这里记录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设置即可,用法如下
app.use(session({ key: 'mt', prefix: 'mtpr', store: new Redis() }))
session存储的是什么?如何查看和读取当前储存值的是什么?
- ctx对象下会创建一个session对象,我们直接读写ctx.session即可
- 查看数据库中的值可通过redis-cli启动客户端程序,keys * 命令可查看当前所有key值,get获取我们想要的值。
如果直接操作操作redis,怎么操作?
- 这里举例是创建一个接口。
- 首先引入koa-redis;
- 创建一个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中查询就能看到我们刚才创建的值啦
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。