一、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
  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()
    
    }))

    截屏2019-12-05下午4.08.36.png

  • session存储的是什么?如何查看和读取当前储存值的是什么?

  1. ctx对象下会创建一个session对象,我们直接读写ctx.session即可
  2. 查看数据库中的值可通过redis-cli启动客户端程序,keys * 命令可查看当前所有key值,get获取我们想要的值。
    截屏2019-12-05下午4.42.51.png
  • 如果直接操作操作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中查询就能看到我们刚才创建的值啦


柚子
57 声望5 粉丝

前端小学生


« 上一篇
koa入门
下一篇 »
nuxt开发-前言