Mongoose中间件入门示例

来源:互联网 发布:信息软件开发 编辑:程序博客网 时间:2024/06/05 16:02

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的客户端,里面还是一条数据,并没有重复记录。

原创粉丝点击