快速上手Nodejs mongoose

来源:互联网 时间:2017-01-22

建了一个公众号,以大家相互交流、读书为主,涉及的知识包括美食、法律、交际等等,很适合什么都想了解一些的人~微信公众号搜索“精粹微阅读”~

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});}})}

相关阅读:
Top