此时我们到mongodb的安装目录下找到 bin
文件夹
打开cmd命令行工具
mongo
此时我们就进入了操作mongodb数据库的环境中了,我们可以通过mongodb命令查看当前数据库的内容,比如查询所有数据库:
show dbs
其实到此为止,已经可以实现使用mongodb的需求了,但是为了更直观的操作数据库数据,可以继续安装可视化界面,这里我使用的是robo3T
下载安装完成后打开软件
点击connect(连接)即可连接到你的mongodb数据库了,这里我自己新建了一个名为life_record
的数据库
如果你koa
和node
用的熟练,完全可以徒手使用koa
来搭建服务器,这里我们使用一个koa
的一个脚手架来快速搭建一个服务器
首先全局安装脚手架
npm i -g koa-generator
koa2 life_record
生成后端项目文件,进入项目中安装依赖并运行
npm install
npm run dev
查看项目的package.json
,我们可以使用两种命令来启动项目
npm start
:使用node
来启动项目
npm run dev
:使用nodemon
来启动项目,可以实现热更新
项目启动完成,查看项目路由文件里的内容就能知道我们的API接口应该如何写了,这里针对四种最常见的 mongodb 数据库操作进行讲解。
拿“事件标签”为例
安装 mongoose
npm i mongoose
在根目录下建立“事件标签”的 model(模型)
// models/eventTag.js
const mongoose = require('mongoose')
const eventTagSchema = new mongoose.Schema({
uuid: String,
icon: String,
label: String,
labelEn: String,
value: String
})
module.exports = mongoose.model('eventtags', eventTagSchema)
因为可能会有多模型,所以这里使用一个主文件进行整合
// models/index.js
const EventTag = require('./eventTag')
const Nav = require('./nav')
const Diary = require('./diary')
module.exports = {
EventTag,
Nav,
Diary
}
“事件标签”路由文件
// routes/eventTag.js
const router = require('koa-router')()
const { v4: uuidv4 } = require('uuid')
const { EventTag } = require('../models')
router.prefix('/eventTag')
router.get('/', async ctn => {
awiat EventTag.xxx...
})
router.post('/add', async ctn => {
awiat EventTag.xxx...
})
// ......增删改查api接口,参考下文
module.exports = router
主文件入口引入
// app.js
...
const MongoConnect = require('./db')
// 连接数据库
MongoConnect()
const index = require('./routes/index')
const eventTag = require('./routes/eventTag')
const diary = require('./routes/diary')
...
// routes
app.use(index.routes(), index.allowedMethods())
app.use(eventTag.routes(), eventTag.allowedMethods())
app.use(diary.routes(), diary.allowedMethods())
...
module.exports = app
// db/index.js
const mongoose = require('mongoose')
module.exports = () => {
mongoose.connect('mongodb://127.0.0.1:27017/life_record').then(() => {
console.log('数据库连接成功...')
}).catch(err => {
console.error('数据库连接失败,' , err)
})
}
// routes/eventTag.js
router.post('/add', async ctx => {
let {icon, label, labelEn, value} = ctx.request.body
await EventTag.create({uuid: uuidv4(), icon, label, labelEn, value}).then(res => {
if(res) {
ctx.body = { code: 0, result: res }
} else {
ctx.body = { code: -1, message: '添加失败' }
}
}).catch(() => {
ctx.body = { code: -1, message: '添加异常' }
})
})
router.post('/delete', async ctx => {
let { uuid } = ctx.request.body
await EventTag.deleteOne({uuid}).then(() => {
ctx.body = {code: 0}
}).catch(() => {
ctx.body = { code: -1, message: '删除异常' }
})
})
router.post('/batchDelete', async ctx => {
let { uuids } = ctx.request.body
await EventTag.deleteMany({uuid: {$in: uuids}}).then(() => {
ctx.body = {code: 0}
}).catch(() => {
ctx.body = { code: -1, message: '删除异常' }
})
})
router.post('/update', async ctx => {
let {icon, uuid, label, labelEn, value} = ctx.request.body
await EventTag.updateOne(
{uuid}, // 查找条件
{icon, label, labelEn, value} // 修改后的值
).then(res => {
ctx.body = {code: 0, result: res}
}).catch(() => {
ctx.body = { code: -1, message: '修改异常' }
})
})
router.get('/', async ctx => {
await EventTag.find({}).then(res => {
ctx.body = {
code: 0,
result: res
}
})
})
router.get('/detail', async ctx => {
await EventTag.findOne({uuid: ctx.request.query.uuid}).then(res => {
if(res) {
ctx.body = {code: 0, result: res}
} else {
ctx.body = {code: 1, message: '查询为空'
}
}).catch(() => {
ctx.body = {code: -1, message: '查询异常'}
})
})
关于mongoose的操作可以参考mongoose API手册
关于mongodb的数据库操作可以去查阅菜鸟教程