MongoDB的DAO封装(node)

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); //返回数据,做页面渲染
    })
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值