node14---分层结构数据库操作

Posted 672530440

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node14---分层结构数据库操作相关的知识,希望对你有一定的参考价值。

/**
0.   外层函数调用的地方,一定是外层函数体先执行,回调函数和普通函数地址一样,然后看函数体规定回调函数怎么执行。
1.异步时候使用回调函数, 
2.回调函数也可以看成是扩展了函数体的功能,因为回调函数可以不一样,其余是公用的功能。
3.回调函数中间媒介作用,把调用函数的地方和定义函数的地方,连接到了一起
,可以进行数据的传递 */
var express = require("express");
var app = express();
var db = require("./model/db.js");

//插入数据,使用我们自己封装db模块,就是DAO。
app.get("/charu",function(req,res){
    //三个参数,往哪个集合中增加,增加什么,增加之后做什么
    db.insertOne("teacher",{"name":"小红"},function(err,result){
        if(err){
            console.log("插入失败");
            return;
        }
        res.send("插入成功");
    });
    /*
    insertOne = function (collectionName, json, callback) {
    _connectDB(function (err, db) {
        db.collection(collectionName).insertOne(json, function (err, result) {
            callback(err, result);
            db.close(); //关闭数据库
        })
    })
};
    */
});


//查找
app.get("/du",function(req,res){
    //这个页面现在接受一个page参数。
    var page = parseInt(req.query.page);  //express中读取get参数很简单
    //查找4个参数,在哪个集合查,查什么,分页设置,查完之后做什么
    db.find("canguan",{},{"pageamount":6,"page":page},function(err,result){//先执行find函数体,函数这个特殊参数什么时候执行取决于函数体怎么写,
        if(err){
            console.log(err);
        }
        res.send(result);
        console.log(result.length);
    });
});

//删除
app.get("/shan",function(req,res){
    var borough = req.query.borough;
    db.deleteMany("canguan",{"borough":borough},function(err,result){//先执行deleteMany函数体,函数什么时候执行取决于函数体
       if(err){
           console.log(err);
       }
        res.send(result);
    });
});


//修改
app.get("/xiugai",function(req,res){
    db.updateMany(
        "canguan",      //集合名字
        {
            "borough":"Manhattan"       //改什么
        },
        {
            $set: { borough: "北京" }     //怎么改
        },
        function(err,result){   //改完之后做什么
            if(err){
                console.log(err);
            }
            res.send(result);
        }
    );
});

app.listen(3000);

db.js

/**
 * 回调函数看成就是一个普通函数地址。
 */
//这个模块里面封装了所有对数据库的常用操作
var MongoClient = require(‘mongodb‘).MongoClient;
var settings = require("../settings.js");
//不管数据库什么操作,都是先连接数据库,所以我们可以把连接数据库
//封装成为内部函数
function _connectDB(callback) {//先执行_connectDB函数体,决定了函数什么时候怎么执行
    var url = settings.dburl;   //从settings文件中,都数据库地址
    //连接数据库
    MongoClient.connect(url, function (err, db) {
        if (err) {
            callback(err, null);
            return;
        }
        callback(err, db);
    });
}

//插入数据,每次都要打开关闭数据库
exports.insertOne = function (collectionName, json, callback) {
    _connectDB(function (err, db) {//先执行_connectDB函数体,这个函数什么时候执行取决于函数的函数体
        db.collection(collectionName).insertOne(json, function (err, result) {
            callback(err, result);
            db.close(); //关闭数据库
        })
    })
};

//查找数据,找到所有数据。args是个对象{"pageamount":10,"page":10}
exports.find = function (collectionName, json, C, D) {//js没有函数重载,必须进行参数修正。
    var result = [];    //结果数组
    if (arguments.length == 3) {
        //那么参数C就是callback,参数D没有传。
        var callback = C;
        var skipnumber = 0;
        //数目限制
        var limit = 0;
    } else if (arguments.length == 4) {
        var callback = D;
        var args = C;
        //应该省略的条数
        var skipnumber = args.pageamount * args.page || 0;
        //数目限制
        var limit = args.pageamount || 0;
        //排序方式
        var sort = args.sort || {};
    } else {
        throw new Error("find函数的参数个数,必须是3个,或者4个。");
        return;
    }

    //连接数据库,连接之后查找所有
    _connectDB(function (err, db) {//先执行_connectDB函数体,这个函数什么时候执行取决于函数的函数体
        var cursor = db.collection(collectionName).find(json).skip(skipnumber).limit(limit).sort(sort);
        cursor.each(function (err, doc) {
            if (err) {
                callback(err, null);
                db.close(); //关闭数据库
                return;
            }
            if (doc != null) {
                result.push(doc);   //放入结果数组
            } else {
                //遍历结束,没有更多的文档了
                callback(null, result);
                db.close(); //关闭数据库
            }
        });
    });
}

//删除
exports.deleteMany = function (collectionName, json, callback) {
    _connectDB(function (err, db) {
        //删除
        db.collection(collectionName).deleteMany(
            json,
            function (err, results) {
                callback(err, results);
                db.close(); //关闭数据库
            }
        );
    });
}

//修改
exports.updateMany = function (collectionName, json1, json2, callback) {
    _connectDB(function (err, db) {
        db.collection(collectionName).updateMany(
            json1,
            json2,
            function (err, results) {
                callback(err, results);
                db.close();
            });
    })
}

exports.getAllCount = function (collectionName,callback) {
    _connectDB(function (err, db) {
        db.collection(collectionName).count({}).then(function(count) {
            callback(count);
            db.close();
        });
    })
}

settings.js

/**
 * 回调函数就是普通函数地址。
 */
module.exports = {
    "dburl" : "mongodb://localhost:27017/haha"
}

 

以上是关于node14---分层结构数据库操作的主要内容,如果未能解决你的问题,请参考以下文章

14.VisualVM使用详解15.VisualVM堆查看器使用的内存不足19.class文件--文件结构--魔数20.文件结构--常量池21.文件结构访问标志(2个字节)22.类加载机制概(代码片段

iKcamp|基于Koa2搭建Node.js实战(含视频)? 代码分层

数据库操作分层结构总结

使用 C# 将数据表转换为分层数据结构 (JSON)

Apollo Codegen 没有找到生成代码的操作或片段

Apache Spark 中的分层数据操作