Reusable schema plugins
If we look at our schemas, we can see some common elements that we are repeating. For example, each of our schemas has an identical modifiedOn
path, and our project and task schemas each have identical createdBy
and createdOn
paths.
If you're at all familiar with the DRY (Don't Repeat Yourself) principle of coding, you'll probably want to tidy these bits up and just declare them once. This is where the Mongoose plugin architecture comes in.
Creating a schema plugin
Let's start by creating a schema extension for adding createdOn
and createdBy
. Inside our model/db.js
file, we can add the following code, preferably above the definitions for our two schemas:
var creationInfo = function creationInfo (schema, options) { schema.add({createdOn: { type: Date, default: Date.now }}); schema.add({createdBy: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true}}); };
This exposes a function that will allow us to plug in the paths createdOn
and createdBy
, to some...