1. 程式人生 > >express中用mongoose操作mongodb資料庫(二)

express中用mongoose操作mongodb資料庫(二)

MongoDB:是一種面向文件的資料庫管理系統,由C++撰寫而成。面向文件(Document-Oriented)的儲存。JSON風格的文件還可以定義動態的模式(Schema),提供了很大程度的自由

mongoose:是mongoDB的一個物件模型工具,是基於node-mongodb-native開發的mongoDB的nodejs驅動,可以在非同步的環境下執行。同時它也是針對mongoDB操作的一個物件模型庫,封裝了mongoDB對文件的一些增刪改查等常用方法,讓nodejs操作mongoDB資料庫變得更加容易。

第一步:

專案下安裝mongoose:cnpm i --save [email protected]

,表示安裝4.x版本,然後在js檔案中引入並宣告:var mongoose = require("mongoose");

第二步:

連結資料庫,預設埠是27017,第二個引數表示相容老版本mongo,連結同時也要開啟mongodb服務才行,第三個引數是回撥函式,函式第一個引數是錯誤物件,有錯誤就存在這個物件:

//將當前全域性物件下的Promise賦值給mongoose.promise
mongoose.Promise = global.Promise;
//連結mongodb資料庫,第二個引數表示相容老版本mongo
mongoose.connect("mongodb://localhost:27017/1710mongo", {useMongoClient: true}, function(err){
	if(!err){			//此處這個函式的第一個引數是mongoose庫提供的一個內建的錯誤物件
		console.log("連線成功")
	}else{
		console.log("連線失敗")
	}
});

資料庫連線成功後,處理前端請求,操作資料庫(儲存資料):

a.建立Schema檔案 (一種以檔案形式儲存資料庫模型骨架,建立一個對映,與資料庫集合屬性對應的對映。意思就是當前資料庫這個集合中有哪些欄位,要提前在mongoose中宣告,相當於提前告訴mongoose應該操作哪些欄位,這個操作就叫schema),這裡我建立檔名為schemas,在這個資料夾中建立一個js檔案,命名一般跟資料資訊有關為好:

var mongoose = require("mongoose");
var userSchemas = mongoose.Schema({//宣告這個集合並新增所用欄位
	username: String,
	pwd: String
})
module.exports = userSchemas;

這個schema檔案只是表示了該集合有哪些欄位,不具備任何操作資料庫的能力;

b.建立model檔案 (相當於讀取schema檔案實現mongoose的CRUD),這裡我建立資料夾名為models,再在該資料夾中建立一個js檔案,命名最好跟schema檔名對應一樣:

var mongoose = require("mongoose");
var userSchemas = require("../schemas/user");//載入剛定義好的schema
var user = mongoose.model("users", userSchemas);//第一個引數定義該集合名稱,第二個schema
module.exports = user;

c.在main.js中載入model模組(剛建立的user.js),每一個model都是一個文件的構造類,在mainjs中載入後可以直接例項化一個model的物件(例項化的同時傳入前端請求的資料物件res.body),這個物件就擁有了操作資料庫的方法,下面演示往資料庫儲存:

var User = require("./models/user");//匯入model
//處理註冊(增加)
app.post("/regist", function(req, res){
	console.log(req.body);
	let {name: username, pwd} = req.body;//解構賦值(username=name)
	//判斷使用者是否已存在,存在提示使用者登入(呼叫model的find()方法)
	User.find({name: username}, function(err, doc){//doc查到的資料
		if(err){return};
		if(doc.length){
			res.json({
				code: 1,
				msg: "使用者名稱已存在"
			})
		}else{
			//操作資料庫,儲存資料
			var user = new User({//例項化mongo資料庫文件的model
				name: username,
				pwd
			});
			user.save(function(err, doc){//第一個引數為錯誤物件,第二個為當前儲存的物件
				if(err){return};
				res.json({//沒有錯誤就返回資料給前端
					code: 0,
					msg: "註冊成功"
				})
			})
		}
	})
})