mongoose&redis

mongodb的概念&安装

1.注意安装完后要在
$ sudo mkdir -p /data/db
根目录中创建这个文件
参考链接
2.检查是否安装成功

终端输入 which mongod
会显示出/usr/local/bin/mongod

mongodb可视化工具RoBo 3T安装及应用

1.运行命令,终端输入

mongod
//最后会输出waiting for connections on port 27017  
//说明启动成功,在监听27017端口

2.打开可视化工具之前要终端启动,不然工具连接不到本地的数据库

mongoose的作用

中文文档
https://mongoose.shujuwajue.com/

mongoose的应用和概念

1.用mongoose去操作mongodb是非常简单的,比原生的简单。
2.范式,可以理解为就是描述你这个数据表,之前学数据库是不是要先建表,是不是要确定有那些数据,需要那些字段,每个字段的格式等等,那么在mongoose中是不需要你手动去创建这个表,他只是用代码去描述这种模型,所以叫schemas模式。
2.模型models,由schemas发布生成的一个模型,里面具备一个抽象的行为,比如想对数据库的增删改查,是模型去操作的。这个模型是mongoose本身写好的。实体也叫实例,跟你数据库创建的那个表关联的,通过这个实例可以对这个表的读写能力。
3.schemas有几种类型,比如新建一个字段,有这个字段的类型约束他。常规类型:(String,Number,Date,Buffer,Boolean,Mixed,Objectid,Array),还支持自定义类型。

编译你的第一个模型
var schema = new mongoose.Schema({ name: 'string', size: 'string' });
var Tank = mongoose.model('Tank', schema);

4.在koa2脚手架用mongoose首先要

//1.进入项目目录
npm i mongoose
//2.创建用一个目录
mkdir dbs
//3.进入当前目录
cd dbs/
//4.新建config.js文件
touch config.js
//5.内容如下
// export default({
//   //在这个数据库下新建了一个数据库叫dbs
//   dbs:'mongodb://127.0.0.1:27017/dbs'
// }) es6
module.exports = {
  //在这个数据库下新建了一个数据库叫dbs
  dbs:'mongodb://127.0.0.1:27017/dbs'
}
//6.再创建一个models
mkdir models
//7.创建一个类型,存储人相关的数据类型
touch models/person.js
//8.内容如下
//dbs/models/person.js/这个命名就是你数据库表的名字
// import mongoose from 'mongoose' es6 
const mongoose = require('mongoosen')
//等于建表,通过代码去描述
let personSchema = new mongoose.Schema({
  name:String,
  age:Number
})
//导出这张描述的数据表,模型和Schema关联导出
// export default mongoose.model('Person',personSchema) es6
module.exports = mongoose.model('Person',personSchema)
//9.在app.js填写以下内容
//第一步引入mongoose
const mongoose = require('mongoose')
const dbConfig = require('./dbs/config')
//连接mongd数据库
mongoose.connect(dbConfig.dbs,{
  useNewUrlParser:true
})
//强调注意!!!如果没有数据的话,你运行了程序,但是可视化工具里面还是会看不到东西的,因为没有数据不会显示
//上面注释的es6 是因为这个koa脚手架没有引入babel,所以用es6会报错

5.编辑一个接口新增数据

//1.routes/users.js路由里面新增一个方法
//首先要把这个模型引进来,建立一个实例
const Person = require('../dbs/models/person')
//2.编写接口
//定义一个post的新增接口
router.post('/addPerson',async function (ctx, next) {
  const person = new Person({
     name:ctx.request.body.name,
     age:ctx.request.body.age
  })
  let code
  try {
    //存进数据库
    await person.save()
    code = 0
  } catch (error) {
    code = 1
  }
  //返回一个接口,如果直接返回,无论存进去对和错都会返回0,所以要捕获错误
  ctx.body = {
    code:code
  }
})

//测试的话可以用命令行
curl -d 'name=lilei&age=27' http://localhost:3000/users/addPerson
//返回结果应该是
{
  "code": 0
}
//再次查看数据库就会有记录了

//3.继续编写查询接口
//定义一个post的查询接口
router.post('/getPerson',async function (ctx, next) {
  const result = await Person.findOne({name:ctx.request.body.name})//查到一个就停止
  const results = await Person.find({name:ctx.request.body.name})//查到出来是一个集合
  //返回一个接口,如果直接返回,无论存进去对和错都会返回0,所以要捕获错误
  ctx.body = {
    code:0,
    result,
    results
  }
})
//请求
curl -d 'name=lilei' http://localhost:3000/users/getPerson
//返回
{
  "code": 0,
  "result": {
    "_id": "5cd63b0a773dcf71ee29fa21",
    "name": "lilei",
    "age": 27,
    "__v": 0
  },
  "results": [
    {
      "_id": "5cd63b0a773dcf71ee29fa21",
      "name": "lilei",
      "age": 27,
      "__v": 0
    }
  ]
}

//4.修改接口
//定义一个post的修改接口
router.post('/updatePerson',async function (ctx, next) {
  const result = await Person.where({
    name:ctx.request.body.name
  }).update({
    age:ctx.request.body.age
  })//查到一个就停止
  ctx.body = {
    code:0
  }
})

//请求
curl -d 'name=lilei&age=11' http://localhost:3000/users/updatePerson
//返回
{
  "code": 0
}

//5.编写删除接口
//定义一个post的删除接口
router.post('/removePerson',async function (ctx, next) {
  const result = await Person.where({
    name:ctx.request.body.name
  }).remove()//查到一个就停止
  ctx.body = {
    code:0
  }
})

//请求
curl -d 'name=lilei' http://localhost:3000/users/removePerson
//返回
{
  "code": 0
}

redis

命令行启动服务

redis-server

1.用redis存储session,如果直接用服务器的session会把内存很快爆满,如果用数据库存储要考虑读写性能
2.操作是key,value非常简单
3.koa操作session和redis

npm i koa-generic-session koa-redis

4.引入模块

//1.引入session和redis
const session = require('koa-generic-session')
const Redis = require('koa-redis')

//1.连接
app.keys=['keys','keyskyes'] //加密的,随便写2个单词也行
//要把seesion的中间件用起来
app.use(session({
  store:new Redis() //默认不指定是使用内存
}))

5.在middleware/koa-pv.js,中间件使用redis存储session

function pv(ctx){
  ctx.session.count++
  global.console.log('pv',ctx.path)
}
module.exports=function(){
  return async function(ctx,next){
    pv(ctx)
    await next()  
  }
}
//app.js要使用这个中间件然后刷新页面就可以存到session进redis

6.客户端查看

//连接
redis-cli
//查看当前所有
keys * 
//获取当前key的值
get (value)

7.在接口中使用redis,就是不一定要配合session使用,如果需要读取比较快的数据也可以这样直接操作redis存储

//routes目录下的users.js定义下面内容
//引入redis
const Redis = require('koa-redis')
const Store = new Redis().client

//定义一个redis的新增接口
router.get('/fix',async function(ctx){
  const st = await Store.hset('fix','name',Math.random())
  ctx.body={
    code:0
  }
})

//测试
curl http://localhost:3000/users/fix
//redis客户端获取
hget fix name

你可能感兴趣的:(mongoose&redis)