koa+mongodb增删改查API接口

koa+mongodb增删改查API接口

  • 安装mongodb及可视化工具
  • 安装koa脚手架
  • 增删改查API
    • create 增
      • deleteOne 单个删除
      • deleteMany 批量删除
      • updateOne 单个修改
      • find 查询所有
      • findOne 查询单个
  • reference

安装mongodb及可视化工具

  • MongoDB 提供了可用于 32 位和 64 位系统的预编译二进制包,你可以到MongoDB官网下载
  • 按照推荐的方式进行安装

此时我们到mongodb的安装目录下找到 bin 文件夹
koa+mongodb增删改查API接口_第1张图片
打开cmd命令行工具

mongo

koa+mongodb增删改查API接口_第2张图片
此时我们就进入了操作mongodb数据库的环境中了,我们可以通过mongodb命令查看当前数据库的内容,比如查询所有数据库:

show dbs

koa+mongodb增删改查API接口_第3张图片
其实到此为止,已经可以实现使用mongodb的需求了,但是为了更直观的操作数据库数据,可以继续安装可视化界面,这里我使用的是robo3T
下载安装完成后打开软件

koa+mongodb增删改查API接口_第4张图片
点击connect(连接)即可连接到你的mongodb数据库了,这里我自己新建了一个名为life_record的数据库
koa+mongodb增删改查API接口_第5张图片

安装koa脚手架

如果你koanode用的熟练,完全可以徒手使用koa来搭建服务器,这里我们使用一个koa的一个脚手架来快速搭建一个服务器
首先全局安装脚手架

npm i -g koa-generator

koa+mongodb增删改查API接口_第6张图片
使用脚手架创建项目

koa2 life_record

生成后端项目文件,进入项目中安装依赖并运行

npm install
npm run dev

查看项目的package.json,我们可以使用两种命令来启动项目
npm start:使用node来启动项目
npm run dev:使用nodemon来启动项目,可以实现热更新

增删改查API

项目启动完成,查看项目路由文件里的内容就能知道我们的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)
  })
}

create 增

// 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: '添加异常' }
  })
})

deleteOne 单个删除

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: '删除异常' }
  })
})

deleteMany 批量删除

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: '删除异常' }
  })
})

updateOne 单个修改

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: '修改异常' }
  })
})

find 查询所有

router.get('/', async ctx => {
  await EventTag.find({}).then(res => {
    ctx.body = {
      code: 0,
      result: res
    }
  })
})

findOne 查询单个

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: '查询异常'}
  })
})

reference

关于mongoose的操作可以参考mongoose API手册
关于mongodb的数据库操作可以去查阅菜鸟教程

你可能感兴趣的:(mongodb,mongodb)