mongoose再認識(三)

今天,說一個常見的知識點插件。對於不熟悉mongoose的人可能會問mongoose中也有插件?這個別說還真的有。node

那麼,在mongoose中的插件如何使用?git

mongoose插件的使用

它和一般用的JavaScript的插件同樣,都是爲了實現代碼的重用。github

mongoose再認識(二)中介紹的方法相似。能夠在Schema的實例上添加。api

首先,介紹一個api schema.add(),這個方法能夠實現對Schema的擴充。mongoose

那麼,能夠緊接着mongoose再認識(二)中的代碼來講,修改它的代碼以下:ui

let UserSchema = new mongoose.Schema({
  firstname: String,
  lastname: String
})

UserSchema.add({
  createAt: {
    type: Date,
    default: Date.now
  },
  updateAt: {
    type: Date,
    default: Date.now
  }
})

UserSchema.pre('save', function(next) {
  let now = Date.now()
  this.updateAt = now;

  if (!this.createAt) this.createAt = now;
})

createAtupdateAt的代碼提取出來,由於在開發中,不少collection都須要它們,一樣也可能須要用到它的處理方法。因此,用一個插件將它們封裝起來變得頗有必要。可參考以下代碼:this

module.exports = function(schema) {
  schema.add({
    createAt: {
      type: Date,
      default: Date.now
    },
    updateAt: {
      type: Date,
      default: Date.now
    }
  })

  schema.pre('save', function(next) {
    let now = Date.now()
    this.updateAt = now;

    if (!this.createAt) this.createAt = now;
  })
}

文件名爲time-plugin.js插件

而後,在使用它的UserSchema定義中引用它。代碼以下:code

let UserSchema = new mongoose.Schema({
  firstname: String,
  lastname: String
})

let timePlugin = require('../plugins/time-plugin.js)

userSchema.plugin(timePlugin)

cnode-club的源碼中定義了一個base_model.js文件,這個文件分別在topic.jsuser.js等文件中進行了引用。ip

mongoose系列文章

相關文章
相關標籤/搜索