快速上手Nodejs mongoose

建了一個公衆號,以大家相互交流、讀書爲主,涉及的知識包括美食、法律、交際等等,很適合什麼都想了解一些的人~微信公衆號搜索“精粹微閱讀”~


1.mongoose和mongodb nodejs

mongoose和mongodb nodejs都是Node.js中可以用於操作MongoDB的模塊,在之前的文章(http://blog.csdn.net/fareise/article/details/53128723)曾經進行過介紹。mongoose可以喝mongodb nodejs一樣,通過Node.js操作MongoDB數據庫,但是二者有很大區別。Mongodb nodejs可以說只是對MongoDB操作的一些封裝,而mongoose添加了諸如Schema等的機制,用來讓Node操作MongoDB變得更加標準,讓Node.js來控制MongoDB中數據的規範性。


2.使用mongoose

(1)安裝:npm install mongoose --save-dev

(2)Schemas和Models

使用mongoose,需要爲每種類型的數據定義Schema和Model。Schema定義了一個數據實體中應該存在每個屬性的數據類型。MongoDB本身是沒有對存入數據類型限定的機制的,而mongoose的Schema中的這種機制,形成了類似於Mysql中定義數據時的類型限定,保證了在MongoDB中存入的數據的規範性。下面我們定義了一個User的Schema,存放在文件schemas/UserSchema.js下:

var UserSchema  = mongoose.Schema({
	username: String,
	password: String, 
	email: String,
	lastAccess: {type:Date,default: Date.now},
	visits: {type: Number, default:0},
	admin: {type: Boolean, default: false},
});
接下來,我們要使用Schema去實例化一個model。在後面定義具體數據實體時,我們就是使用model進行定義的。在models/user.js下創建user的model:

var mongoose = require('mongoose')
var UserSchema = require('../Schema/UserSchema.js')
var User = mongoose.model('User', UserSchema)

module.exports = User
這樣,我們就生成了User的Model,在之後的使用中,直接導入User的Model即可。


3.使用Model創建實例

當一個新用戶註冊時,我們希望將註冊成功的信息存入MongoDB數據庫中,這時就可以使用之前創建的User Model來完成這個工作。下面是一個例子:

var user = new User({
   username: 'test',
   password: 'xxxxxx',
   email: '[email protected]'
})

使用new關鍵字創建一個新的實例,其中User是我們通過var User = require('../models/user')來進行引入的user model模塊。在實例化中,在對象中傳入Schema中定義的參數即可,注意傳入的數據的數據類型要與Schema中定義的相同,這就是mongoose最大的一個優勢的體現。


4.數據庫操作

(1)連接數據庫

數據庫的連接代碼如下:

mongoose.connect('mongodb://localhost/user')
這之後,mongoose會一直開啓和MongoDB的連接,直到調用相關函數關閉連接。
(2)操作數據

定義好了用戶實例的數據,接下來就是將數據存儲MongoDB中了。在mongoose中,可以使用save方法存儲一個數據的實例,代碼如下:

user.save(function(err, user){
   if (err) {
      console.error(err);
      return;
   }else{
      console.log(user);
      res.send({code: 1});
   }
})
調用我們剛纔定義好的user的save方法,就可以將數據存放到數據庫中。mongoose爲每個Schema都定義了一些默認方法,save就是其中之一。user是User Schema的實例之一,因此也可以調用save方法,將自身存儲於數據庫中。

類似的,mongoose中還有update(更新數據)、find(查找數據)等方法,這些都可以在官方文檔中瞭解它們的使用方法。


下面是一段服務器端註冊處理的完整代碼,供大家參考:

registerUser: function(req, res){
	var md5 = crypto.createHash('md5');
	var username = req.body.username;       //獲取用戶註冊的用戶名、密碼和電子郵箱
	var password = req.body.password;
        var email = req.body.email;
	md5.update(password);	                //對密碼進行md5加密
	var passwordHashed = md5.digest('hex');		
        User.find({username: username}, function(err, user){     //看用戶名之前是否存在,不存在則進行註冊
      		if (user.length == 0) {
         		var user = new User({         //實例化
            		username: username,
            		password: passwordHashed,
            		email: email
        	 })
         	user.save(function(err, user){   //存儲數據
            		if (err) {
              			console.error(err);
              			return;
            		}else{
               			console.log(user);
              			res.send({code: 1});
            		}
        	 })	
      		}else{
        	 	res.send({code: 2});
      		}
   	})
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章