Node.js操作mongodb資料庫

http://blog.csdn.net/zk437092645/article/details/9330931準備:安裝Node.js,mongodb,mongoose,webstorm這裡我採用的是mongoose來處理的。Mongoose是MongoDB的一個對象模型工具,可以工作於非同步環境下。具體學習內容參看官網http://mongoosejs.com/docs/index.html1、開始運用mongoose時,得先安裝,打開命令行,執行$ npm install mongoose2、連接mongodb資料庫,在app.js裡面添加如下兩行代碼。[javascript]view plaincopyvarmongoose=require("mongoose");mongoose.connect("mongodb://localhost/test");//連接到一個test的資料庫操作到這裡基本上是個人都會,不過接下來具體如何進行資料庫的操作,在沒有實例的情況下還是有點糾結的。我這裡以一個登錄註冊為例來說明如何使用。3、用webstorm創建一個新的Express App項目,這樣就直接封裝好了express(),省去了自己寫的麻煩。然後修改app.js如下:[javascript]view plaincopy/***Moduledependencies.*/varexpress=require("express"),routes=require("./routes"),user=require("./routes/user"),http=require("http"),path=require("path"),mongoose=require("mongoose");//1varapp=express();//allenvironmentsapp.set("port",process.env.PORT||3000);app.set("views",__dirname+"/views");app.set("viewengine","ejs");app.use(express.favicon());app.use(express.logger("dev"));app.use(express.bodyParser());app.use(express.methodOverride());app.use(app.router);app.use(express.static(path.join(__dirname,"public")));//developmentonlyif("development"==app.get("env")){app.use(express.errorHandler());}app.get("/",routes.index);app.get("/log",routes.login);app.post("/log",routes.doLogin);app.get("/reg",routes.reg);app.post("/reg",routes.doReg);//mongoosemongoose.connect("mongodb://localhost/test_db");//2http.createServer(app).listen(app.get("port"),function(){console.log("Expressserverlisteningonport"+app.get("port"));});4、接下來定義一下Schema和Model,這些就是資料庫表的結構。在項目根路徑下創建一個models的文件夾,裡面添加一個user.js用來定義用戶表。models/user.js代碼如下。[javascript]view plaincopyvarmongoose=require("mongoose"),Schema=mongoose.Schema,ObjectId=Schema.ObjectId;varUserSchema=newSchema({name:String,password:String});module.exports=mongoose.model("User",UserSchema);注意最後一行,這裡是直接把UserSchema的Model給導出去了,也可以直接導出UserSchema,module.exports = UserSchema,不過這樣做的話,再用這個表信息的時候就得單獨Model一下。5、引入mongoose後,自己添加相應的文件,在view里新建登錄註冊頁,頭部底部這些包含文件也都自己建。先說註冊頁,表單處理路徑為/reg。注意用戶名密碼的輸入框我是直接用name="user[]"這種形式,這樣後面可以直接通過這個user來獲取相關信息,其實不這樣也可以。[javascript]view plaincopy<%includeheader.ejs%><formaction="/reg"method="post"><inputtype="text"name="user[name]"/><inputtype="password"name="user[password]"/><inputtype="submit"value="Register"/></form><%includefooter.ejs%>接下來修改doReg方法,這是處理註冊事件的函數。6、修改index.js,因為想在這裡註冊時候把數據存入到資料庫中,所以這裡需要引用上面第四步創建的model。具體代碼如下所示。[javascript]view plaincopyvarUser=require("../models/user");/**GEThomepage.*/exports.index=function(req,res){User.find({},function(err,users){res.render("index",{title:"Express",users:users});});};exports.reg=function(req,res){res.render("reg",{title:"RegisterPage"});};exports.doReg=function(req,res){varuser=newUser(req.body.user);user.save(function(err,user){if(!err){console.log(user);res.redirect("/")}});console.log(req.body.user);};這一步要注意為什麼是req.body.user,這裡就是前面寫頁面直接用user[]這種形式帶來的好處,如果單獨寫name="username",那麼這裡就應該是下面這種形式。[javascript]view plaincopyvaruser=newUser({name:req.body["username"],password:req.body["password"]});user.save就是把剛才數據提交到資料庫,具體使用方法參看官方文檔。save成功之後執行什麼操作就自己發揮吧。保存之前也可以進行一些簡單的表單驗證等等。7、通過登錄來講如何從資料庫取出數據,繼續修改index.js,如下所示。[javascript]view plaincopyvarUser=require("../models/user");/**GEThomepage.*/exports.index=function(req,res){User.find({},function(err,users){res.render("index",{title:"Express",users:users});});};exports.login=function(req,res){res.render("log",{title:"LoginPage"});};exports.doLogin=function(req,res){varuser=req.body.user;User.find(user,function(err,docs){if(!err){if(docs!=""){console.log(docs);returnres.redirect("/");}else{console.log("用戶名或密碼不正確");returnres.redirect("/log");}}else{console.log("Somethinghappend.");}})};exports.reg=function(req,res){res.render("reg",{title:"RegisterPage"});};exports.doReg=function(req,res){varuser=newUser(req.body.user);user.save(function(err,user){if(!err){console.log(user);res.redirect("/")}});console.log(req.body.user);};這裡通過find()方法來查詢資料庫,使用方法不解釋了。第一個參數user就是要查詢的數據,從輸入框獲取過來的,如果不是用user[]這種形式定義的name屬性,那麼這裡一樣的用{naem:req.body["username"],password:req.body["password"]}這樣的寫法。回調函數docs就是從資料庫查詢返回的結果。例子到此結束。-------------------------
推薦閱讀:

怎樣勸服機關單位使用 MySQL/MongoDB/Redis 取代 Oracle?
利用Scrapy爬取所有知乎用戶詳細信息並存至MongoDB
Mongo 代理程序實現-代碼實戰篇
spark讀取mongo數據(python)

TAG:資料庫 | Node.js | mongo |