DAO就是Data Access Object 数据访问对象,为了就是分模块进行数据开发,而不是直接能够访问数据库
前提:在用nodejs时先下载以下几个模块
- express模块
npm i express --sava
- mongodb模块
npm i mongodb@2.0.43 --save
这里不加版本的话可能会出现错误
- body-parser模块
npm i body-parser --save
用来接收POST请求传过来的参数
数据操作的封装
// 数据库操作模块
let MongoClient = require("mongodb").MongoClient;
//数据库连接封装
function _connectionFun(callback){// callback回调函数
//所要连接的数据库
let sqlData="administration";
//cmd连接数据库服务
let sqlUrl="mongodb://127.0.0.1:27017/"+sqlData;
//链接
MongoClient.connect(sqlUrl,(err,db)=>{
if(err){//连接失败时
console.log(err);
return;//直接退出
}
callback(err,db);
})
}
//数据库的操作封装
//导出添加
exports.insertFun = function(collectionName, objData, callback) {//参数分别为集合名,添加数据(对象的形式),回调函数
//没操作一次,得先连接数据库
_connectFun(function(err, db) {
//添加语句collectionName为集合名(说白就是表名)
db.collection().insertOne(objData, (err, result) => {
callback(err, result);//服务层调用
db.close();//关闭数据库
})
})
}
//修改
exports.updateFun = function(collectionName, objDataO, objDataT, callback) {//参数分别为集合名,被修改数据(对象的形式,根据_id来修改),修改数据,回调函数
_connectFun(function(err, db) {
db.collection(collectionName).updateOne(objDataO, objDataT, (err, result) => {
callback(err, result);
db.close();
})
});
}
//删除
exports.deleteFun = function(collectionName, objData, callback) {//objData为_id值,根据_id删除
_connectFun(function(err, db) {
db.collection(collectionName).deleteOne(objData, (err, result) => {
callback(err, result);
db.close();
})
});
}
//排序
exports.sortFun = function(collectionName, objData, callback) {
//返回并不是一条数据,得用东西接收返回给服务器
const result = []; //存放查询数据
_connectFun(function(err, db) {
db.collection(collectionName).find().sort(objData).each((err, document) => {
//objData是以对象形式(例子{age:-1or1})1wei升序,-1降序
if (err) {
callback(err, null);
db.close();
return;
}
if (document != null) {
result.push(document);
} else {
callback(null, result);
db.close();
}
});
})
}
//查询
exports.selectFun = function(collectionName, objData, indexO, indexT) {
/*
当只有三个参数时,为条件查询indexO就是callback回调函数
当只有四个参数时,为分页查询indexT就是callback回调函数,indexO为页数,与过滤条数
*/
let limitnum = 0;
let skipnum = 0;
let callback;
if (arguments.length == 3) {
callback = indexO;
} else if (arguments.length == 4) {
limitnum = indexO["listen"]; //当前第几页
skipnum = indexO["skip"]; //过滤多少条
callback = indexT;
} else {
throw new Error("参数必须为three or four");
}
const result = []; //存放查询数据
_connectFun(function(err, db) {
db.collection(collectionName).find(objData).limit(limitnum).skip(skipnum * limitnum).each((err, document) => {
if (err) {
callback(err, null);
db.close();
return;
}
if (document != null) {
result.push(document);
} else {
callback(null, result);
db.close();
}
});
})
}
以上是mongodb的数据库语句分装
详情语句参考:点击
//模块
const express = require("express");
const bodyParser = require("body-parser");
const db = require("./sqltype.js"); //导入封装模块数据库
const ObjectId = require("mongodb").ObjectId; //获取mongodb自带_id,唯一的.
const app = express();
//格式
app.use(bodyParser.urlencoded({ extended: false }));
//静态私服
app.use(express.static("proJect", { index: "page/home.html" }));//默认显示页,proJect为html、css、js、img所在文件夹
//接口
//加载
app.get("/loading", (req, res) => {
db.selectFun("collectionName", {}, (err, result) => {
if (err) {
res.send("0"); //数据获取失败,请检查网络!
return;
}
res.send(result); //返回数据,做页面渲染
})
})