快速上手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: '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});
      		}
   	})
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值