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