建了一个公众号,以大家相互交流、读书为主,涉及的知识包括美食、法律、交际等等,很适合什么都想了解一些的人~微信公众号搜索“精粹微阅读”~
1.mongoose和mongodb nodejs
mongoose和mongodb nodejs都是Node.js中可以用于操作MongoDB的模块,在之前的文章(http://blog.youkuaiyun.com/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: 'test@gmail.com'
})
使用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});
}
})
}