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删除单条

浙公网安备 33010602011771号