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

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删除单条  
上一篇:node技术选型记录


下一篇:koa 中间件