时间:2021-07-01 10:21:17 帮助过:8人阅读
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/
封装 Koa操作Mongodb数据库的DB类库
标签:mongod 地址 console use struct 对象 exports span rect