vue+koa 美团实战之Mongodb基础

mongodb的安装

安装好mongodb和Robo3T, 并开启mangodb的服务。

cd koa2-learn

在根目录下检录dbs文件夹,并创建配置文件。

npm i mongoose

mkdir dbs

touch config.js

config.Js 文件内容如下:


module.exports  =  {
    'dbs': 'mongodb://127.0.0.1:27017/dbs'
}

新建module, 创建schema

mkdir modules

touch modules/person.js

person.js 文件如下:

    import mongoose from 'mongoose'
    
    let personSchema = new mongoose.Schema({
        name: String,
        age: Number
    })

    module.exports = mongoose.module('person', personSchema)

最后,在app.js连接数据库

const mongoose = require('mongoose')

const dbConfig = require('./dbs/config')

mongoose.connect(dbConfig.dbs, {
  useNewUrlParse: true
})

抽空查看useNuwUrlParse配置什么。后期补上

使用

新建实例+接口
写入数据库

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
  }
  
})

shell中输入:
curl -d 'name=lhanmeimeiage=28' http://localhot:3000/users/addPerson

读取:

router.post('/getPerson', async function(ctx) {
  const result = await Person.findOne({
    name: ctx.request.body.name
  })
  ctx.body = {
    code: 0,
    result
  }
})

shell中输入:
curl -d 'name=lilei' http://localhost:3000/users/getPerson

修改:

router.post('/updatePerson', async function(ctx) {
  const result = await Person.where({
    name: ctx.request.body.name
  }).update({
    age: ctx.request.body.age
  })
  ctx.body = {
    code: 0,
    result
  }
})

删除:

router.post('/removePerson', async function(ctx) {
  const result = await Person.where({
    name: ctx.request.body.name
  }).remove()
  ctx.body = {
    code: 0,
    result
  }
})

Redis

问题: 服务端如何识别客户端的登录状态?

答: 服务端把session种植到cookie中, 下次访问客户端会带着cookie去访问服务端。 服务端通过cookie识别该用户是否第一次登录。

redis 是一个存储数据库, 快速读写, 使用简单

安装:

  1. 官网http://redis.io/ 下载最新的稳定版本

  2. sudo mv 到 /usr/local/

  3. sudo tar -zxf redis-x.x.x.tar 解压文件

  4. 进入解压后的目录 cd redis-3.2.0

  5. sudo make test 测试编译

  6. sudo make install

启动

redis-server


koa如何连接redis?

这里用到两个中间件:

  1. koa-redis ====> 连接redis
  2. koa-generic-session ====> 处理session

npm install koa-redis koa-generic-session

如何使用?
app.js中引入:

const session = require('koa-generic-session')
const Redis = require('koa-redis')

加密session

app.keys=['keys', 'keykey']

使用Redis

app.use(session({
  store: new Redis()
}))

在pv中间件中,设置访问了多少次

function pv(ctx) {
  ctx.session.count++
  global.console.log('pv' + ctx.path);
}

module.exports = function() {
  return async function(ctx, next) {
    pv(ctx);   //执行操作
    await next(); // 这一步很重要, 等待执行完毕, 交给下一个中间件
  }
}

前面说了,redis是用来存储高速的变化的数据的,那么现在我想用redis存储一些诗句怎么办?

第一步: 在路由中引入redis

const Redis = require('koa-redis')

第二步: 新建客户端

const Store = new Redis().client

第三步: 创建路由, 并存储数据

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的客户端访问

keys *

得到结果

1) "koa:sess:VkHvftBqDXyPJR5M6wDOptNchjbRGRg3"
2) "koa:sess:L1MPm7ZUNe9knRwtTpo1bx2umRs1u1Du"
127.0.0.1:6379> keys *
1) "koa:sess:VkHvftBqDXyPJR5M6wDOptNchjbRGRg3"
2) "koa:sess:L1MPm7ZUNe9knRwtTpo1bx2umRs1u1Du"
3) "koa:sess:OKKOo1qW2SWD3GhDlPOpx5CgImtKdwBl"
4) "fix"
5) "koa:sess:nGE1ulNRltuF_jvAgAl9pYnaJmZVulep"
6) "koa:sess:QMvts_30V7zlrkHe-0gQtLlEdekpMcc3"
7) "koa:sess:Uab2dEaAJvP1leJXgJ4nKKsl9_CmI_PB"

猜你喜欢

转载自blog.csdn.net/weixin_40814356/article/details/83067473