Mongoose 是 MongoDB 數(shù)據(jù)庫的模型工具,為 Node.js 設(shè)計,工作于異步環(huán)境下,基于 node-mongodb-native。
與使用 node-mongodb-native 相比,使用 Mongoose 可以簡化不少代碼。這里我們不會講解 Mongoose 的使用,讀者可去以下鏈接學習 Mongoose 的相關(guān)知識:
首先,在 package.json 中添加對 mongoose 的依賴:
"mongoose": "*"
并 npm install 安裝 mongoose 包。
注意:完全使用 mongoose 的話可以刪除 mongodb 模塊,但我們這里只是局部使用 mongoose ,所以暫時保留。
修改 user.js 如下:
var crypto = require('crypto');
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/blog');
var userSchema = new mongoose.Schema({
name: String,
password: String,
email: String,
head: String
}, {
collection: 'users'
});
var userModel = mongoose.model('User', userSchema);
function User(user) {
this.name = user.name;
this.password = user.password;
this.email = user.email;
};
User.prototype.save = function(callback) {
var md5 = crypto.createHash('md5'),
email_MD5 = md5.update(this.email.toLowerCase()).digest('hex'),
head = "http://www.gravatar.com/avatar/" + email_MD5 + "?s=48";
var user = {
name: this.name,
password: this.password,
email: this.email,
head: head
};
var newUser = new userModel(user);
newUser.save(function (err, user) {
if (err) {
return callback(err);
}
callback(null, user);
});
};
User.get = function(name, callback) {
userModel.findOne({name: name}, function (err, user) {
if (err) {
return callback(err);
}
callback(null, user);
});
};
module.exports = User;
注意:Mongoose 會自動為每一個文檔添加一個 __v 即 versionKey (版本鎖),如下所示:
> db.users.find()
{ "name" : "nswbmw", "password" : "d41d8cd98f00b204e9800998ecf8427e", "email" :
"gxqzk@126.com", "head" : "http://www.gravatar.com/avatar/11c35a5b58d99d2c8a9501
65b795917d?s=48", "_id" : ObjectId("527ae6e8d38086540a000001"), "__v" : 0 }
關(guān)于 versionKey 的使用詳見: http://mongoosejs.com/docs/guide.html#versionKey 。
讀者可自行完成剩余的修改工作。