nodejs下のmongoDBの使用
一、DAO層がなく、直接データベースを操作する
まずdb.jsを作成して、データベースに接続します.
/**
* 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);