目录
mongdb
概念
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
安装
mongdb
点击上面链接打开进入下载对应系统的安装包,具体安装流程链接已详细说明,这里不作讲述。注意安装完成后,一定要去创建数据目录。
运行
如何检查是否安装成功?
可以在命令行工具下输入which mongod,如果出现下图的地址则表明安装成功,注意windows自带的cmd是不支持该命令的,你可以使用git bash 或者其他的命令行工具去检测。
在命令行工具中输入mongod指令,即可运行mongodb的服务器,它会占用你的27017的端口
如果它报一下的提示
则需要你手动加入你的数据目录
mongod --dbpath D:\MongoDB\data\db <=(你的数据目录)
RoBo 3T(可视化数据库管理工具)
安装
RoBo 3T
这里直接上连接自行下载安装即可,它就是一个mongodb的可视化管理工具。
连接数据库
打开这个软件后,它会提示你连接本地的27017端口,所以在启动这个软件前,要先把mongodb的服务器启动先。
mongoose
概念理解
Mongoose的一切都始于模式(Schema)。每个schema映射到MongoDB的集合(collection)和定义该集合(collection)中的文档的形式。
模式(Schema): 可以理解为它是描述你的数据表,在数据库建表的时候需要决定有什么字段及它的字段格式等,而在mongoose中,它不需要你手动的创建表,只需用代码去描述这个模型即可。
模型(models):由Schema生成的里面具备一个抽象的行为(增、删、改、查)
实例(collection):相当于数据库中的数据表,mongodb中则为collection。通过collection对数据库进行读写操作。
安装
使用npm或者yarn等包管理工具安装,这里默认大家已经安装好koa及其相关的依赖,如果还不懂的可以看我的另外一篇文章。
npm i mongoose
安装的等待过程,我们在项目的目录下创建dbs的文件夹用来创建数据库的相关文件。
在dbs目录下创建config.js用于声明数据库的配置选项。
在js中写入下面配置代码
连接
module.exports = {
dbs:'mongodb://127.0.0.1:27017/dbs' //在数据库中创建dbs的数据库,键值中的dbs为字段。
}
在dbs目录中再创建一个models目录,存放schema。
现在来写一个简单的schema,在models新建一个person.js
const mongoose = require('mongoose');//引入monoogse
//建立Schema模型
let personSchema = new mongoose.Schema({
name: String,
sex: Boolean
})
// 导出
module.exports = mongoose.model('Person',personSchema)
//Person为表名
一般你定义的表名mongoose会根据schema生成的集合名称采用的是schema名称的复数形式。
比如我们定义了Person,那么创建后 实际它会生成一个people的表,这里要注意一下。
接下来我们在app.js进行对数据库的链接
首先引入mongoose再引入配置文件再进行链接
const mongoose = require('mongoose')
const dbConfig = require('./dbs/config')
// 引入
mongoose.connect(dbConfig.dbs,{ //dbs就是在配置文件中定义的键值
useNewUrlParser:true
})
再从新运行数据就会连接上了。
操作(增删改查)
打开路由中的其中一个模块文件
注意路由中的文件一定记得在app.js中进行引入
//app.js
const index = require('./routes/index')
const users = require('./routes/users')
app.use(index.routes(), index.allowedMethods())
app.use(users.routes(), users.allowedMethods())
我们在users.js中引入刚刚写的模型
const Person = require('../dbs/models/person')
增删改查
//向数据写入数据
router.post('/addPerson',async function(ctx){
const person = new Person({ //新增Person的实例
name: ctx.request.body.name,
age:ctx.request.body.age
})
let code
try {
await person.save()
code =0
} catch(e) {
code =-1
}
ctx.body = {
code: code
}
})
//读取数据
router.post('/getPerson',async function(ctx){
const result = await Person.findOne({name:ctx.request.body.name});//模型直接操作
const results = await Person.find({name:ctx.request.body.name});
ctx.body = {
code:0,
result,
results
}
})
//更新数据
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
}
})
//删除数据
router.post('/removePerson',async function(ctx){
const result = await Person.where({
name:ctx.request.body.name
}).remove()
ctx.body = {
code:0
}
})
完成上面的写入后 我们可以使用postman或者其他工具进行post的请求,注意users.js中是否有前缀设置prefix
有则要把前缀加上。
当你执行完addPerson的请求后,可以在Robo 3T中找到你刚刚新增数据了。
最后给大家贴身mongoose的中文文档,文档的翻译有一定的滞后性,如果想看最新版本的文件建议还是看官网的(英文)。
mongoose中文文档
mongoose官方文档
redis
概念
它是一个快速读写的、高性能key-value的数据库
特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
详细的介绍在它的官方文档有说明,这里就不再详细叙述了。
安装
redis
点击上面链接,按照官方给的步骤一步一步的安装及配置它的环境变量,非常的简单。
启动服务(运行)
命令行工具运行以下代码即可,注意,这里一定要先配置好环境变量才行,如果没有配置环境变量则需要进入到安装好的目录下执行。
redis-server
出现上面这样的语句表示启动成功。
连接redis(koa-redis、koa-generic-session)
使用包管理工具安装在项目目录下执行下面代码进行安装
npm i koa-redis koa-koa-generic-session
koa-generic-session(操作session)
koa-redis(连接redis)
安装好后,我们在app.js中引入并使用这两个中间件
const session = require('koa-generic-session')
const Redis = require('koa-redis')
app.keys=['keykeykeyk','keys'] //session做加密处理的随便填入一些字符即可
app.use(session({
key:'mt', // 存储字段名称
prefix:'mtpr', //前缀
store:new Redis() // 不加session默认存储在内存
}))
当你访问接口的时候就会存储到你的cookie里面了,mt就是上面key中定义的
操作
新建一个命令行工具输入下面指令启动客户端程序
redis-cli
我们输入keys *
(有关更多的指令可以查看官方文档)查看已有的值
这里我们看到值中的前4个字符是mtpr就是上面app.js中设置好的prefix前缀
一个key值代表一个用户,如果想要查看key值中的内容可以用get
指令
我们在项目的middleware目录下创建自己的一个中间件,里面设置好每请求一次接口,session的count+1,然后我们在浏览器打开http://localhost:3000/,在回到上面的控制台get一次刚刚的key会发现它的count的对应的增加。
上面的例子我们是通过操作session写入到redis里面,但是我们也是可以直接操作redis的,看下面例子
users.js
const router = require('koa-router')()
const Redis = require('koa-redis') // 引入redis中间件
const Person = require('../dbs/models/person')
const Store = new Redis().client //新建redis的客户端
router.prefix('/users')
router.get('/fix', async function(ctx){
const st = await Store.hset('fix','name',Math.random()) //name为key,后面的参数为值
ctx.body={
code:0
}
})
接下来我们在浏览器输入localhost:3000/users/fix
,看到页面返回code:0,然后我们回到上面的命令行工具验证是否已经写入成功,输入hget fix key(键值)
,可以看到他返回了刚刚我们存储的值。
相关连接汇总
koa2+koa-router以及koa脚手架的使用(koa-generator)
mongdb
RoBo 3T
mongoose中文文档
mongoose官方文档
redis
redis指令