对MongoDB的封装,主要使用express,通过npm下载mongodb包。在这里我们使用的是2.0.43版本的mongo数据库。
db.js
封装层
const express = require("express");
const MongoClient = require("mongodb").MongoClient;
// 连接数据库
//使用mongodb创建好数据库后,直接引用url,封装链接。
function _connectDB(callback){
let url = "mongodb://127.0.0.1:27017/school";
MongoClient.connect(url,(err,db)=>{
console.log("数据库连接成功")
if(err){
callback(err,null);
return
}
callback(err,db)
})
}
// 插入单个数据
//添加数据,传入集合名,json数据,回调函数
exports.insertOne = function(collectionName,json,callback){
_connectDB(function(err,db){
db.collection(collectionName).insertOne(json,(err,result)=>{
callback(err,result);
db.close()
})
})
}
//删除单个数据
exports.deleteOne = function(collectionName,json,callback){
_connectDB(function(err,db){
db.collection(collectionName).deleteOne(json,(err,result)=>{
callback(err,result);
db.close();
})
})
}
//更新单个数据,集合名,更新前的数据,更新后的数据,回调函数
exports.updateOne = function(collectionName,json1,json2,callback){
_connectDB(function(err,db){
db.collection(collectionName).updateOne(json1,json2,(err,result)=>{
callback(err,result)
db.close()
})
})
}
//查询数据
//查询数据,可能存在查询分页的情况,
exports.find = function(collectionName,json,C,D){
//如果传入的参数长度是3,则C为回调函数,没有D
if(arguments.length == 3){
var limitnum = 0;
var skipnum = 0;
var callback = C;
}else if(arguments.length == 4){
var callback = D;
var args = C;
var limitnum = args.pagenum || 0;
var skipnum = args.page || 0;
}else{
throw new Error("find参数必须是三个或四个");
}
const result = [];
_connectDB(function(err,db){
const cursor = db.collection(collectionName).find(json).limit(limitnum).skip(skipnum *limitnum)
cursor.each((err,document)=>{
if(err){
callback(err,null)
db.close()
return
}
if(document != null){
result.push(document)
}else{
callback(null,result)
db.close()
}
})
})
}
调用层 app.js
//使用express
const db = require("./db.js");
const express = require("express");
const { ObjectId } = require("mongodb");
const app = express();
//mongo数据的唯一id
const Objectid = require("mongodb").ObjectId;
//添加数据
app.get("/addData",(req,res)=>{
let name = req.query.name;
let age = req.query.age;
//student 是集合名
db.insertOne("student",{"id":0,"name":name,"age":age},(err,result)=>{
if(err){
res.send("0");
return
}
res.send("1")
})
})
//删除数据
app.get("/deleteData",(req,res)=>{
//获取传入的唯一id
let id = req.query.delStuID;
db.deleteOne("student",{"id":new Objectid(id)},(err,result)=>{
if(err){
res.send("0");
return;
}
res.send("1")
})
})
//更新数据 接收传入的name age 来更新
app.get("/updateData",(req,res)=>{
let name = req.query.name;
let age = req.query.age;
let obj = {
"name" : "jack",
"age" : 100
};
let str = {
"name" : name,
"age" : age
}
db.updateOne("student",obj,str,(err,result)=>{
if(err){
res.send("0");
return;
}
res.send("1")
})
})
//查询数据
//pagenum page
app.get("/findData",(req,res)=>{
let pagenum = parseInt(req.query.pagenum);
let page = parseInt(req.query.page);
db.find("student",{},{"pagenum":pagenum,"page":page},function(err,result){
if(err){
res.send("0")
return
}
res.send(result)
})
})
//监听端口号
app.listen(3000)