以下提供一个Node.js封装的MongoDB数据库的方法,欢迎各位码农复制粘贴!
首先是数据库配置文件config.js
var dbInfo={
dbUrl: 'mongodb://localhost:27017/',
dbName: 'koa'
};
module.exports=dbInfo;
然后就是封装的方法mongoDB.js,包含的数据库的增、删、改、查。
// 引入MongoDB数据库模块
const MongoDB = require('mongodb');
// 获得数据库客户端
const MongoClient = MongoDB.MongoClient;
// 获取操作数据库ID的方法
const ObjectID = MongoDB.ObjectID;
// 引入数据库的配置文件
const Config=require('./config.js');
class DB{
// 单例模式,解决多次实例化实例不共享的问题
static getInstance(){
if(!DB.instance){
DB.instance=new DB();
}
return DB.instance;
}
constructor(){
this.dbClient='';
// 实例化的时候就连接数据库,解决第一次查询太久的问题
this.connect();
}
// 连接数据库
connect(){
let that=this;
return new Promise((resolve,reject)=>{
// 解决数据库多次连接的问题
if(!that.dbClient){
MongoClient.connect(Config.dbUrl,{useNewUrlParser:true}, (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,doc){
if(err){
reject(err);
return;
}
resolve(doc);
})
})
})
}
// 更新方法
update(collectionName,oldJson,newJson){
return new Promise((resolve,reject)=>{
this.connect().then((db)=>{
db.collection(collectionName).updateOne(oldJson,{
$set:newJson
},(err,result)=>{
if(err){
reject(err);
}else{
resolve(result);
}
})
})
})
}
// 插入数据
insert(collectionName,json){
return new Promise((resolve,reject)=>{
this.connect().then((db)=>{
db.collection(collectionName).insertOne(json,function(err,result){
if(err){
reject(err);
}else{
resolve(result);
}
})
})
})
}
// 删除数据
remove(collectionName,json){
return new Promise((resolve,reject)=>{
this.connect().then((db)=>{
db.collection(collectionName).removeOne(json,function(err,result){
if(err){
reject(err);
}else{
resolve(result);
}
})
})
})
}
// mongodb里面查询_id需要把字符串转换成对象
getObjectId(id){
return new ObjectID(id);
}
}
module.exports=DB.getInstance();
基于Koa的应用实例。
var Koa=require('koa'),
router = require('koa-router')(),
render = require('koa-art-template'),
path=require('path'),
bodyParser=require('koa-bodyparser'),
DB=require('./module/mongoDB.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',{});
await ctx.render('student',{
list:result
});
})
// 增加学员
router.get('/add',async (ctx)=>{
await ctx.render('add');
})
// 执行增加学员操作
router.post('/doAdd',async (ctx)=>{
// 获取表单提交的数据
let data=await DB.insert('user',ctx.request.body);
try{
if(data.result.ok){
ctx.redirect('/')
}
}catch(err){
ctx.redirect('/add');
}
})
// 编辑学员
router.get('/edit',async (ctx)=>{
// 获取用户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)=>{
// 获取用户信息
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){
ctx.redirect('/');
}
})
// 删除学员
router.get('/delete',async (ctx)=>{
let id=ctx.query.id;
var data=await DB.remove('user',{"_id":DB.getObjectId(id)});
if(data){
ctx.redirect('/')
}
})
app.use(router.routes());
app.use(router.allowedMethods());
app.listen(3000);