今天,說一個常見的知識點插件。對於不熟悉mongoose的人可能會問mongoose中也有插件?這個別說還真的有。node
那麼,在mongoose中的插件如何使用?git
它和一般用的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; })
將createAt
和updateAt
的代碼提取出來,由於在開發中,不少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.js
、 user.js
等文件中進行了引用。ip