一、MongoDB入门
安装Mongoose
1. brew tap mongodb/brew
2. brew install mongodb-community
3. brew services start mongodb-community
4. 检查是否安装成功:which mongod
5. 启动项目:mongod
6. 这里mac系统可能会因为系统升级存在创建相关文件夹失败的错误的问题。这里只需先关闭SIP保护,在进行创建即可。
7. 这里建议配合数据库工具去查看我们与数据库交互情况,[Robo 3T](https://user-gold-cdn.xitu.io/2019/12/5/16ed3b8d16b52c86)
8. 安装npm i mongoose
9. 创建dbs文件夹,在内创件config.js来保存我们数据库地址。以及models文件夹,里面就是我们需要存储的信息
10. 在app.js引入mongoose和数据库地址,进行连接。
11. 接口中做创建实例
# 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安装和使用?
1. Mac下使用brew install redis
2. 使用redis-server启动即可
3. 进入项目,在项目内安装2个中间件(koa-redis、koa-generic-session)
redis配合session使用?
1. 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中
}))
2. 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()
}
}
3. 此时刷新页面查看。cookie中已经有我们刚存进去的值了koa开头的就是我们储存进去的内容,这里koa开头的key值我们是可以去修改的。通过key和前缀prefix设置即可,用法如下
app.use(session({
key: 'mt',
prefix: 'mtpr',
store: new Redis()
}))
session存储的是什么?如何查看和读取当前储存值的是什么?
1. ctx对象下会创建一个session对象,我们直接读写ctx.session即可
2. 查看数据库中的值可通过redis-cli启动客户端程序,keys * 命令可查看当前所有key值,get获取我们想要的值。
直接操作操作redis,怎么操作?
1. 这里举例是创建一个接口。
2. 首先引入koa-redis;
3. 创建一个redis客户端
4. 接口中写入
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中查询就能看到我们刚才创建的值啦