封装 Koa操作Mongodb数据库的DB类库
Posted loaderman
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了封装 Koa操作Mongodb数据库的DB类库相关的知识,希望对你有一定的参考价值。
//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/
以上是关于封装 Koa操作Mongodb数据库的DB类库的主要内容,如果未能解决你的问题,请参考以下文章
前后端分离全栈开发项目师徒开启,VUE+koa+MongoDB!
用Node.JS+MongoDB搭建个人博客(model目录)