node之mongodb的DAO

來源:互聯網
上載者:User

標籤:ring   engine   結構   密碼   enum   name   pre   amount   cal   

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

 

node之mongodb的DAO

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.