Mongoose和Redis安裝以及使用

1、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. 接口中作建立實例redis

    # npm in mongoose
    # mkdir dbs
    # mkdir dbs/models 
    # touch dbs/models/person.js
    # touch dbs/config.js
  • 使用Mongoose增刪改查

    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.jscookie

    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

2、Redis基礎

  • session和cookie的關係?

    提及咱們平時工做中常開發的登錄功能,服務端的程序是如何識別客戶端的狀態呢?HTTP是無狀態的,用戶訪問了咱們服務端的程序,怎麼保證下次訪問的時候仍是這個用戶呢?服務端的session又是如何保持在客戶端呢?app

  • redis安裝和使用?

  1. Mac下使用brew install redis
  2. 使用redis-server啓動便可
  3. 進入項目,在項目內安裝2箇中間件(koa-redis、koa-generic-session)
  • redis配合session使用?

  1. 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中
    }))
  2. 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()
        }
    }
  3. 此時刷新頁面查看。cookie中已經有咱們剛存進去的值了koa開頭的就是咱們儲存進去的內容,這裏koa開頭的key值咱們是能夠去修改的。經過key和前綴prefix設置便可,用法以下curl

    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中查詢就能看到咱們剛纔建立的值啦

相關文章
相關標籤/搜索