koa结合mongDB实现后台增删改查

允我心安 提交于 2019-12-05 04:32:46

node.js是一门轻量级后台语言,基于chorme V8引擎的JS运行环境,利用koa框架能够轻易搭建自己本地服务。这里我用koa和mongoDB实现了简单的数据库增删改查。

一、安装依赖

使用npm 或者 yarn 都可以,这里我使用的是yarn

1、yarn add koa //安装koa

2、yarn add koa-router //安装koa-router,轻松实现路由

3、yarn add koa-views //安装koa-views,配置视图模板

4、yarn add koa-body //安装koa-body,用于处理post请求

5、yarn add mongoose //安装mongoose,操作数据库

二、利用koa创建本地服务

koa.js 文件

const Koa = require('koa')
const { join } = require('path')
const koaBody = require('koa-body')
const views = require('koa-views')
const router = require('./router')   //导入路由模块,下面会有详细代码
const app = new Koa

app
    .use(views(join(__dirname, "views"), {   
  //配置视图模板,html文件存放到文件夹views里面
  //node的一个特点就是服务端渲染,这里可以直接配置为html页面,也可配置为pug等模板文件
        extension: "html" 
    }))
    .use(koaBody()) //处理post请求
    .use(router.routes()) //1
    .use(router.allowedMethods()) //2
 //步骤1,2将路由绑定到Koa的实例app身上
    .listen(8000,err => {
        !err && console.log('服务启动成功,端口监听在8000')
    })
至此,命令行输入node koa.js 运行,端口成功监听在8000!
 

二、通过mongoose连接数据库

mongodb.js 文件
 1 const mongoose = require('mongoose')
 2 //新版mongoose推荐使用createConnection连接数据库,不要使用connect
 3 const db = mongoose.createConnection('mongodb://localhost:27017/user',{
 4  //添加这两个参数为了避免警告
 5     useNewUrlParser:true,
 6     useUnifiedTopology: true
 7 })
 8 
 9 //用es6的Promise覆盖mongoose自实现的Promise,我们用es6的Promise就好了
10 mongoose.Promise = global.Promise
11 db.on('error',(err)=>{console.log(err)})
12 db.on('open',()=>{console.log('mongodb连接成功')})
13 const Schema = mongoose.Schema     //得到Schema构造函数
14 const UserShcema = new Schema({   //用Schema定义插入数据的类型
15     name:{
16         type:String,
17         required:true
18     },
19     age:Number,
20     sex:{
21         type:String,
22         default:"男"
23     }
24 },{versionKey: false, timestamps: {
25     createdAt: "created"
26   }})
27 
28 //建立集合,规定使用定义好的Shcema标准插入数据,返回一个构造函数
29 const Users = db.model('user',UserShcema)
30 //将Users暴露出去,可以用于操作数据
31 exports.Users = Users
数据库代码书写完毕,接下来通过路由的方式来操作数据库,实现增删改查

三、利用koa-router实现路由

router.js 文件
const Router = require('koa-router')
const { Users } = require('./mongodb')
const router = new Router

说明:我们通过localhost:8000访问本地服务,默认返回的是根路由,这时可以渲染index页面,如果前面没有配置视图模板,那么将不存在ctx.render方法。koa2建议中间件最好使用异步回调,中间件就是跟在路由后面的异步函数,一条路由可以有一个或者多个中间件,通过next方法决定执不执行下一个中间件

router.get('/', async ctx => {
    await ctx.render('index')
})

//增
router.post('/addtion',async ctx => {
    const { name, age, sex } = ctx.request.body
    const user = new Users({
        name,
        age,
        sex
    })
    //save方法是异步的,必须等待它执行完成后才能ctx.body,否则,ctx.body是无法返回到页面的
    const isSuccess = await user.save()
        .then( () => {
            console.log('保存成功')
            return true
        })
        .catch( err => {
            console.log(err)
            return false
        })
    ctx.body = isSuccess ? '添加成功' : '添加失败'
})

//删
router.get('/deletion',async ctx => {
    const isSuccess = await Users.deleteMany(ctx.query).then( res => {
        return res
    }).catch( () => {
        return false
    })
    ctx.body = isSuccess ? `成功删除了${isSuccess.n}条数据` : '删除失败'
})

//改
router.get('/modification',async ctx => {
    const result = await Users.updateMany(
        ctx.query,
        {$set:{'name':'MongoDB'}
    }).then( res => {
        return res
    }).catch( () => {
        return false
    })
    ctx.body = result ? '修改成功' : '修改失败'
})

//查
router.get('/locating',async ctx => {
    const result = await Users.find(ctx.query).then( res => {
        return res
    }).catch( (err) => {
        return err
    })
    ctx.body = result
})

module.exports = router

 

这里除了增加用户使用的post请求,其余都用get代替了,这样是不规范的,但是为了图简便,仅仅为了表达这个意思。这时我们通过手动修改url参数就能实现增删改查效果:
例如:
http://localhost:8000/deletion?age=18   将删除年龄为18的所有用户,因为我使用的是deleteMany,也可以使用deleteOne删除单条
 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!