Плагины
Схемы являются подключаемыми, то есть они позволяют применять предварительно упакованные возможности для расширения их функциональности. Это очень мощная функция.
Предположим, что у нас есть несколько коллекций в нашей базе данных и мы хотим добавить функциональность последнего изменения в каждую из них. С плагинами это легко. Просто создайте плагин один раз и примените его к каждой Schema:
// lastMod.js module.exports = exports = function lastModifiedPlugin (schema, options) { schema.add({ lastMod: Date }) schema.pre('save', function (next) { this.lastMod = new Date next() }) if (options && options.index) { schema.path('lastMod').index(options.index) } } // game-schema.js var lastMod = require('./lastMod'); var Game = new Schema({ ... }); Game.plugin(lastMod, { index: true }); // player-schema.js var lastMod = require('./lastMod'); var Player = new Schema({ ... }); Player.plugin(lastMod);
Мы только что добавили поведение последнего изменения к нашим Game и Player схемам и объявили индекс по пути lastMod наших игр. Неплохо для нескольких строк кода.
Глобальные плагины
Хотите зарегистрировать плагин для всех схем? Синглтон mongoose имеет функцию .plugin(), которая регистрирует плагин для каждой схемы. Например:
var mongoose = require('mongoose'); mongoose.plugin(require('./lastMod')); var gameSchema = new Schema({ ... }); var playerSchema = new Schema({ ... }); // `lastModifiedPlugin` gets attached to both schemas var Game = mongoose.model('Game', gameSchema); var Player = mongoose.model('Player', playerSchema);
Сообщество!
Вы не только можете повторно использовать функциональность схем в своих собственных проектах, но также получаете преимущества сообщества Mongoose. Любой плагин, опубликованный на npmjs.org и помеченный меткой mongoose будет отображаться на нашей странице результатов поиска.
Далее
Теперь, когда мы рассмотрели плагины и как участвовать в активно развивающемся сообществе вокруг них, давайте посмотрим, как вы можете помочь внесите свой вклад в дальнейшее развитие самого Mongoose.
© 2010 LearnBoost
Licensed under the MIT License.
https://mongoosejs.com/docs/4.x/docs/plugins.html