nodejs下mongoDB的使用

一、无DAO层,直接操作数据库

/**
 * Created by Danny on 2015/9/25 9:16.
 */
var express = require("express");
var app = express();
var MongoClient = require('mongodb').MongoClient;


app.get("/",function(req,res){
    //url就是数据库的地址。/表示数据库
    //假如数据库不存在,没有关系,程序会帮你自动创建一个数据库
    var url = 'mongodb://localhost:27017/haha';
    //连接数据库
    MongoClient.connect(url, function(err, db) {
        //回调函数表示连接成功做的事情,db参数就是连接上的数据库实体
        if(err){
            console.log("数据库连接失败");
            return;
        }
        console.log("数据库连接成功");
        //插入数据,集合如果不存在,也没有关系,程序会帮你创建
        db.collection('student').insertOne({
            "name" : "哈哈",
            "age" : parseInt(Math.random() * 100 + 10)
        }, function(err, result) {
            if(err){
                console.log("插入失败");
                return;
            }
            //插入之后做的事情,result表示插入结果。
            //console.log(result);
            res.send(result);
            db.close();
        });
    });
});

app.listen(3000);

二、封装DAO层(推荐)
(Data Access Object数据访问对象是一个面向对象的数据库接口,DAO类)

先创建一个db.js 用于连接数据库

/**
 * Created by Danny on 2015/9/25 9:31.
 */
//这个模块里面封装了所有对数据库的常用操作
var MongoClient = require('mongodb').MongoClient;
var settings = require("../settings.js");
//不管数据库什么操作,都是先连接数据库,所以我们可以把连接数据库
//封装成为内部函数
function _connectDB(callback) {
    var url = settings.dburl; //从settings文件中,都数据库地址
    //连接数据库
    MongoClient.connect(url, function(err, db) {
        if (err) {
            callback(err, null); // db为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(); //关闭数据库
        })
    })
};

//查找数据,找到所有数据。args是个对象{"pageamount":10,"page":10}
exports.find = function(collectionName, json, C, D) {
    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) {
        var cursor = db.collection(collectionName).find(json).skip(skipnumber).limit(limit).sort(sort);
        cursor.each(function(err, doc) {
            if (err) {
                callback(err, null); // 这里callback就是对查询结果进行处理
                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();
        });
    })
}

setting.js

/**
 * Created by Danny on 2015/9/25 11:31.
 */
module.exports = {
    "dburl" : "mongodb://localhost:27017/haha"
}

app.js中查询数据库操作

var express = require("express");
var app = express();
var db = require("./model/db.js");
var session = require("express-session");

app.use(session({
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: true
}));

app.set("view engine", "ejs");


app.get("/", function(req, res) {
    if (req.session.login == "1") {
        res.send("欢迎" + req.session.username);
    } else {
        res.send("没有成功登陆");
    }
});

app.get("/login", function(req, res) {
    res.render("denglu");
});

app.get("/checklogin", function(req, res) {
    var tianxiedeusername = req.query.username;
    var tianxiedepassword = req.query.password;
    //根据用户填写的姓名,去数据库里面找这个文档,读取密码。
    //如果读取的密码,和填写的密码一样,登陆成功了;
    //如果读取的密码,和填写的密码不一样,登陆失败
    //如果根本没有找到这个记录,那么就说明用户名填写错了
    db.find("users", { "username": tianxiedeusername }, function(err, result) {
        if (result.length == 0) {
            res.send("你的登录名写错了,没有这个注册用户");
            return;
        }
        var shujukuzhongdepassword = result[0].password;
        if (shujukuzhongdepassword == tianxiedepassword) {
            req.session.login = "1"; // 数据库查到该用户,登录成功,设置session保存用户信息
            req.session.username = result[0].username;
            res.send("成功登陆!你是" + result[0].username);
        } else {
            res.send("密码错误!");
        }
    })
});

app.listen(3000);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值