一、无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);