nodejs mongodb template使用_【NodeJS】封装 Koa操作Mongodb数据库的DB类库

256c54376d3e5cfa8275f75f77b7d90b.gif

操作mongodb数据库

Koa 操作 Mongodb 数据库 

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

//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)

示例

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);

  码上加油站

  一起来加油

长按扫码关注

59dff3445507ec2a92326005c1eb7856.png 记得点个 在看 哦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值