封装 Koa操作Mongodb数据库的DB类库

时间:2021-11-29 01:39:18

//http://mongodb.github.io/node-mongodb-native/3.0/quick-start/quick-start/

/* nodejs操作mongodb数据库 1.安装mongodb、 cnpm install mongodb --save 2.引入mongodb下面的MongoClient var MongoClient = require(‘mongodb‘).MongoClient; 3.定义数据库连接的地址 以及配置数据库 koa数据库的名称 var url = ‘mongodb://localhost:27017/‘; var dbName = ‘koa‘ 4.nodejs连接数据库 MongoClient.connect(url,function(err,client){ const db = client.db(dbName); 数据库db对象 }) 5.操作数据库 db.user.insert MongoClient.connect(url,function(err,db){ db.collection(‘user‘).insertOne({"name":"张三"},function(err,result){ db.close() //关闭连接 }) }) */

var MongoClient = require(‘mongodb‘).MongoClient; var dbUrl = ‘mongodb://localhost:27017/‘; var dbName = ‘koa‘

//连接数据库 //console.time(‘start‘); //MongoClient.connect(dbUrl,(err,client)=>{ // if(err){ // // console.log(err); // return; // } // // var db=client.db(dbName); // console.timeEnd(‘start‘); // //增加数据 // // db.collection(‘user‘).insertOne({‘username‘:"wangwu",‘age‘:26,‘sex‘:"男","status":"1"},function(err,result){ // // if(!err){ // //console.log(‘增加数据成功‘); // client.close(); // // } // }) // //})
 console.time(‘start1‘); MongoClient.connect(dbUrl,(err,client)=>{ if(err){ console.log(err); return; } var db=client.db(dbName); //查询数据
    var result=db.collection(‘user‘).find({}); result.toArray((err,docs)=>{ console.timeEnd(‘start1‘); console.log(docs); }) }) console.time(‘start2‘); MongoClient.connect(dbUrl,(err,client)=>{ if(err){ console.log(err); return; } var db=client.db(dbName); //查询数据

    var result=db.collection(‘user‘).find({}); result.toArray((err,docs)=>{ console.timeEnd(‘start2‘); console.log(docs); }) })
var Koa=require(‘koa‘), router = require(‘koa-router‘)(), render = require(‘koa-art-template‘), path=require(‘path‘), DB=require(‘./module/db.js‘); var app=new Koa(); //配置 koa-art-template模板引擎
render(app, { root: path.join(__dirname, ‘views‘),   // 视图的位置
    extname: ‘.html‘,  // 后缀名
    debug: process.env.NODE_ENV !== ‘production‘  //是否开启调试模式
}); router.get(‘/‘,async (ctx)=>{ console.time(‘start‘); var result=await DB.find(‘user‘,{}); console.timeEnd(‘start‘); console.log(result); await ctx.render(‘index‘,{ list:{ name:‘张三‘ } }); }) router.get(‘/news‘,async (ctx)=>{ console.time(‘start‘); var result=await DB.find(‘user‘,{}); console.timeEnd(‘start‘); ctx.body="这是一个新闻页面"; }) app.use(router.routes()); /*启动路由*/ app.use(router.allowedMethods()); app.listen(3000);

DB.js

//DB库
var MongoClient = require(‘mongodb‘).MongoClient; var Config=require(‘./config.js‘); class Db{ static getInstance(){ /*1、单例 多次实例化实例不共享的问题*/

        if(!Db.instance){ Db.instance=new Db(); } return Db.instance; } constructor(){ this.dbClient=‘‘; /*属性 放db对象*/
        this.connect();   /*实例化的时候就连接数据库*/ } connect(){ /*连接数据库*/ let _that=this; return new Promise((resolve,reject)=>{ if(!_that.dbClient){         /*1、解决数据库多次连接的问题*/ MongoClient.connect(Config.dbUrl,(err,client)=>{ if(err){ reject(err) }else{ _that.dbClient=client.db(Config.dbName); resolve(_that.dbClient) } }) }else{ resolve(_that.dbClient); } }) } find(collectionName,json){ return new Promise((resolve,reject)=>{ this.connect().then((db)=>{ var result=db.collection(collectionName).find(json); result.toArray(function(err,docs){ if(err){ reject(err); return; } resolve(docs); }) }) }) } update(){ } insert(){ } } module.exports=Db.getInstance();

config.js

/*配置文件*/


var app={ dbUrl: ‘mongodb://localhost:27017/‘, dbName: ‘koa‘ } module.exports=app;

 数据库的备份

//DB库
var MongoClient = require(‘mongodb‘).MongoClient; var Config=require(‘./config.js‘); class Db{ static getInstance(){ /*1、单例 多次实例化实例不共享的问题*/

        if(!Db.instance){ Db.instance=new Db(); } return Db.instance; } constructor(){ this.dbClient=‘‘; /*属性 放db对象*/
        //this.connect();
 } connect(){ /*连接数据库*/ let _that=this; return new Promise((resolve,reject)=>{ if(!_that.dbClient){         /*1、解决数据库多次连接的问题*/ MongoClient.connect(Config.dbUrl,(err,client)=>{ if(err){ reject(err) }else{ _that.dbClient=client.db(Config.dbName); resolve(_that.dbClient) } }) }else{ resolve(_that.dbClient); } }) } find(collectionName,json){ return new Promise((resolve,reject)=>{ this.connect().then((db)=>{ var result=db.collection(collectionName).find(json); result.toArray(function(err,docs){ if(err){ reject(err); return; } resolve(docs); }) }) }) } update(){ } insert(){ } } var myDb=Db.getInstance(); setTimeout(function(){ console.time(‘start‘); myDb.find(‘user‘,{}).then(function(data){ //console.log(data);
        console.timeEnd(‘start‘); }) },100) setTimeout(function(){ console.time(‘start1‘); myDb.find(‘user‘,{}).then(function(data){ //console.log(data);
        console.timeEnd(‘start1‘); }) },3000) var myDb2=Db.getInstance(); setTimeout(function(){ console.time(‘start3‘); myDb2.find(‘user‘,{}).then(function(data){ //console.log(data);
        console.timeEnd(‘start3‘); }) },5000) setTimeout(function(){ console.time(‘start4‘); myDb2.find(‘user‘,{}).then(function(data){ //console.log(data);
        console.timeEnd(‘start4‘); }) },7000)

demo:

var Koa=require(‘koa‘), router = require(‘koa-router‘)(), render = require(‘koa-art-template‘), path=require(‘path‘), bodyParser=require(‘koa-bodyparser‘), DB=require(‘./module/db.js‘); var app=new Koa(); //配置post提交数据的中间件
app.use(bodyParser()); //配置 koa-art-template模板引擎
render(app, { root: path.join(__dirname, ‘views‘),   // 视图的位置
    extname: ‘.html‘,  // 后缀名
    debug: process.env.NODE_ENV !== ‘production‘  //是否开启调试模式
}); //显示学员信息
router.get(‘/‘,async (ctx)=>{ var result=await DB.find(‘user‘,{}); console.log(result); await ctx.render(‘index‘,{ list:result }); }) //增加学员
router.get(‘/add‘,async (ctx)=>{ await ctx.render(‘add‘); }) //执行增加学员的操作
router.post(‘/doAdd‘,async (ctx)=>{ //获取表单提交的数据

   // console.log(ctx.request.body); //{ username: ‘王麻子‘, age: ‘12‘, sex: ‘1‘ }
 let data=await DB.insert(‘user‘,ctx.request.body); //console.log(data);
    try{ if(data.result.ok){ ctx.redirect(‘/‘) } }catch(err){ console.log(err); return; ctx.redirect(‘/add‘); } }) //编辑学员
router.get(‘/edit‘,async (ctx)=>{ //通过get传过来的id来获取用户信息
 let id=ctx.query.id; let data=await DB.find(‘user‘,{"_id":DB.getObjectId(id)}); //获取用户信息
    await ctx.render(‘edit‘,{ list:data[0] }); }) router.post(‘/doEdit‘,async (ctx)=>{ //通过get传过来的id来获取用户信息
    //console.log(ctx.request.body);

    var id=ctx.request.body.id; var username=ctx.request.body.username; var age=ctx.request.body.age; var sex=ctx.request.body.sex; let data=await DB.update(‘user‘,{"_id":DB.getObjectId(id)},{ username,age,sex }) try{ if(data.result.ok){ ctx.redirect(‘/‘) } }catch(err){ console.log(err); return; ctx.redirect(‘/‘); } }) //删除学员
router.get(‘/delete‘,async (ctx)=>{ let id=ctx.query.id; var data=await DB.remove(‘user‘,{"_id":DB.getObjectId(id)}); console.log(data); if(data){ ctx.redirect(‘/‘) } }) app.use(router.routes()); /*启动路由*/ app.use(router.allowedMethods()); app.listen(3000);
var Koa=require(‘koa‘), router = require(‘koa-router‘)(), render = require(‘koa-art-template‘), path=require(‘path‘), bodyParser=require(‘koa-bodyparser‘), DB=require(‘./module/db.js‘); var app=new Koa(); //配置post提交数据的中间件
app.use(bodyParser()); //配置 koa-art-template模板引擎
render(app, { root: path.join(__dirname, ‘views‘),   // 视图的位置
    extname: ‘.html‘,  // 后缀名
    debug: process.env.NODE_ENV !== ‘production‘  //是否开启调试模式
}); //显示学员信息
router.get(‘/‘,async (ctx)=>{ var result=await DB.find(‘user‘,{}); console.log(result); await ctx.render(‘index‘,{ list:result }); }) //增加学员
router.get(‘/add‘,async (ctx)=>{ await ctx.render(‘add‘); }) //执行增加学员的操作
router.post(‘/doAdd‘,async (ctx)=>{ //获取表单提交的数据

   // console.log(ctx.request.body); //{ username: ‘王麻子‘, age: ‘12‘, sex: ‘1‘ }
 let data=await DB.insert(‘user‘,ctx.request.body); //console.log(data);
    try{ if(data.result.ok){ ctx.redirect(‘/‘) } }catch(err){ console.log(err); return; ctx.redirect(‘/add‘); } }) //编辑学员
router.get(‘/edit‘,async (ctx)=>{ //通过get传过来的id来获取用户信息
 let id=ctx.query.id; let data=await DB.find(‘user‘,{"_id":DB.getObjectId(id)}); //获取用户信息
    await ctx.render(‘edit‘,{ list:data[0] }); }) router.post(‘/doEdit‘,async (ctx)=>{ //通过get传过来的id来获取用户信息
    //console.log(ctx.request.body);

    var id=ctx.request.body.id; var username=ctx.request.body.username; var age=ctx.request.body.age; var sex=ctx.request.body.sex; let data=await DB.update(‘user‘,{"_id":DB.getObjectId(id)},{ username,age,sex }) try{ if(data.result.ok){ ctx.redirect(‘/‘) } }catch(err){ console.log(err); return; ctx.redirect(‘/‘); } }) //删除学员
router.get(‘/delete‘,async (ctx)=>{ let id=ctx.query.id; var data=await DB.remove(‘user‘,{"_id":DB.getObjectId(id)}); console.log(data); if(data){ ctx.redirect(‘/‘) } }) app.use(router.routes()); /*启动路由*/ app.use(router.allowedMethods()); app.listen(3000);

Koa 操作 Mongodb 数据库

官方文档:http://mongodb.github.io/node-mongodb-native/