Mongoose中间件入门示例

1 篇文章 0 订阅
1 篇文章 0 订阅

Mongoose的中间件功能很强大,可以把复杂的异步程序,诸如各种数据验证的方法,拆分后按照同步顺序执行,这里就举一个简单的中间件用法

//前面的代码都是范式,在基础入门已经提过了
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:28001/test');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error'));
db.once('open', function () {
  console.log('mongoose is open!')
});

var personSchema = new Schema({
  name:{
  type:String,
  unique:true //这里指定了name的唯一性
  },
}) 
var Schema = mongoose.Schema;
var Person = mongoose.model('Person', personSchema);

//这里引用了一个中间件,此中间件在save操作之前执行,所以关键字是pre
//判断error, 这里指的的是重复保存数据的一个error
//中间件的写法和express很像
//如果有error,那就会用next(err)传到下面
//这里还有一点注意的是这个中间件要写在创建Person类的下面,否则无用
personSchema.pre('save', function(err, doc, next){
  if(err.name == 'MongoError' && err.code == 11000){
    next(new Error('duplicated key error'))
  } else {
    next(err); 
  }
 });

//这里用了create方法
Person.create([{name:'Tom'},{name:'Tom'}], function(err, doc){
  if(err) console.log(err.message)
  console.log('saved');
  console.log(doc)
});

我们看到保存是成功的,但是只保存了一条document.

这里写图片描述

如果你再运行一次create操作,会看到控制台报错:

这里写图片描述

然后你再去看下mongoDB的客户端,里面还是一条数据,并没有重复记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值