zoukankan      html  css  js  c++  java
  • node之mongodb的DAO

    DAO就是数据库的提供方法再封装一层。

    mongodb-DAO:

    var mongoClient=require("mongodb").MongoClient;
    //数据库连接
    var setting=require("../settings.js");
    
    //连接数据库方法
    function _connectDB(callback){
        var url=setting.dburl;
        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){
            db.collection(collectionName).insertOne(json,function(err,result){
                callback(err,result);
                db.close();
            });
        });
    }
    
    //查找数据
    exports.find=function(collectionName,json,C,D){
        var result=[];
        var argsLen=arguments.length;
        var limit=0;
        var skipNum=0;
        var callback=C;
        var sort={};
        if(argsLen==4){
            var args=C;
            callback=D;
            limit=args.pageamount||0;
            skipNum=args.pageamount*args.page||0;
            sort=args.sort||{};
        }
        _connectDB(function(err,db){
            if(err){
                res.send(err);
                return ;
            }
            var cursor=db.collection(collectionName).find(json).limit(limit).skip(skipNum).sort(sort);
            cursor.each(function(err,doc){
                if(err){
                    callback(err,null);
                    db.close();
                    return ;
                }
                if(doc!=null){
                    result.push(doc);
                }else{
                    callback(err,result);
                    db.close();
                }
            });
        });
    }
    
    //删除
    exports.deleteMany=function(collectionName,json,callback){
        _connectDB(function(err,db){
            db.collection(collectionName).deleteMany(json,function(err,result){
                callback(err,result);
                db.close();
            })
        });
    }
    //更新
    exports.updataMany=function(collectionName,json1,json2,callback){
        _connectDB(function(err,db){
            db.collection(collectionName).updataMany(json1,json2,function(err,result){
                callback(err,result);
                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/tab"
    }

    下面是一个登录-注册-留言的例子:

    var express=require("express");
    var app=express();
    var db=require("./model/mdb.js");
    
    /*formidable必须类表单提交,直接ajax不行,如使用ajax提交表单*/
    var formidable=require("formidable");
    
    /***
        mongodb可以直接创建库,只要库不存它就会创建,当存在时就使用当前的
        集合也是,所以它很灵活,是一门可以使用js编写shell的数据库
        它不看重字段的一致性,所以它可以随便储存
        每个集合下的文档里的json对象里的对象里都有一个_id的,可以使用它做唯一标示符
        因为它是一个对象,所以需要一些特殊方式转换它,如nodeJS里的require("mongodb").ObjectID
        引入一个模块对象直接转换它
    */
    var ObjectID=require("mongodb").ObjectID;
    
    var session = require("express-session");
    
    var md5 = require('./model/md5.js');
    
    //session默认设置  只有req有session设置和获取
    app.use(session({
        secret: 'keyboard cat',
        resave: false,
        saveUninitialized: true
    }));
    
    //引用渲染页面引擎
    app.set("view engine","ejs");
    //静态文件位置
    app.use(express.static("./public"));
    
    //入口
    app.get("/",function(req,res,next){
        if(!req.session.login){
            res.redirect("/zhuce");
            return ;
        }
        //查询数据的总量
        db.getAllCount("liuyanban",function(count){
            res.render("index",{
                pageamount:Math.ceil(count/5),
                name:req.session.username
            });
        });
    });
    
    //提交
    app.post("/tijiao",function(req,res,next){
        var form=new formidable.IncomingForm();
    
        form.parse(req,function(err,fields){
            db.insertOne("liuyanban",{
                "name":fields.name,
                "des":fields.des,
                "time":new Date()
                },function(err,result){
                    if(err){
                        res.send(false);
                        return ;
                    }
                        res.send(true);
            });
        });
    
    });
    
    //查询
    app.get("/read",function(req,res,next){
        var pageNum=parseInt(req.query.pageNum);
            db.find("liuyanban",{},{
                pageamount:5,
                page:pageNum,
                sort:{time:-1}
            },function(err,result){
                var obj={status:false};
                if(err){
                    res.send(obj);
                    return ;
                }
                obj["status"]=true;
                obj["content"]=result;
                res.send(obj);
            });
    });
    
    //删除
    app.get("/shanchu",function(req,res,next){
        var id=ObjectID(req.query.id);
            db.deleteMany("liuyanban",{_id:id},function(err,result){
                if(err){
                    res.send("删除失败");
                    return ;
                }
                    res.redirect("/");
            });
    });
    
    //注册
    app.post("/zhuce",function(req,res,next){
        var form=new formidable.IncomingForm();
        form.parse(req,function(err,fields){
            db.insertOne("user",{
                "name":fields.name,
                "pwd":md5(fields.pwd)
                },function(err,result){
                    if(err){
                        res.send(false);
                        return ;
                    }
                        res.send(true);
            });
        });
    
    });
    //注册
    app.get("/zhuce",function(req,res,next){
        res.render("zhuce");
    });
    
    //登录
    app.post("/denglu",function(req,res,next){
        var form=new formidable.IncomingForm();
        form.parse(req,function(err,fields){
            var pwd=md5(fields.pwd);
            db.find("user",{
                name:fields.name
            },function(err,result){
                var obj={};
                if(err){
                    res.send(obj);
                    return ;
                }
                if(result.length==0){
                    obj={status:false,err:"账号错误"};
                    res.send(obj);
                    return ;
                }
                if(pwd!=result[0].pwd){
                    obj={status:false,err:"密码错误"};
                    res.send(obj);
                    return ;
                }
                req.session.login = true;
                req.session.username = result[0].name;
                obj["status"]=true;
                obj["content"]=result;
                res.send(obj);
            });
        });
    
    });
    //登录
    app.get("/denglu",function(req,res,next){
        res.render("denglu");
    });
    app.listen(3000);

    没有给目录结构。因为结构是默认设置那种。

     MD5:

    var crypto = require('crypto');
    
    function md5(str){
        var md5Method=crypto.createHash("md5");
        var pwd=md5Method.update(str.toString()).digest("base64");
        return pwd;
    }
    
    function dealMd5(str){
        return md5(md5(str).substr(2,5)+md5(str)+md5(str).substr(4,7));
    }
    
    module.exports=dealMd5;

    每次使用mongodb都要开启数据库。

    普通开启

    mongod --dbpath c:mongo

    选择引擎开启,因为mongodb3后出现两个引擎,而新引擎有些mongodb客户端不兼容
    mongod --storageEngine mmapv1 --dbpath c:mongo

  • 相关阅读:
    南京师范大学2021年高等代数数学分析考研试题及参考解答
    南昌大学2021年数学分析考研试题参考解答
    南昌大学2021年高等代数考研试题参考解答
    河南师范大学2021年数学分析考研试题参考解答
    河海大学2021年数学分析考研试题参考解答
    河海大学2021年高等代数考研试题参考解答
    合肥工业大学2021年高等代数数学分析考研试题参考解答
    福州大学2021年高等代数数学分析考研试题参考解答
    东华大学2021年高等代数数学分析考研试题参考解答
    安徽大学2021年数学分析考研试题参考解答
  • 原文地址:https://www.cnblogs.com/zhangzhicheng/p/7523840.html
Copyright © 2011-2022 走看看