Mongoose中文文档-指南之插件(Plugins)

 2018年11月19日    147     声明


Mongoose支持插件功能,我们可以将可重用的功能打包成插件,然后可以在全局级别(mongoose级别)或模式级别(Schema级别)加载插件,以实现插件的共享。

  1. 插件
  2. 全局插件
  3. 官方插件
  4. 社区支持

1. 插件

模式是可插件化的,也就是说,它允许应用预先打包的一些通用性功能来扩展其功能。这是一个非常强大的功能。

例如,我们的数据库中有多个集合,并希望为每个集合添加最后修改的功能。使用插件,就这很容易实现这一功能。只需创建一个插件并将其应用于每个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);

以上我们将“最后修改”操作添加到了GamePlayer模式中,并在GamelastMod路径上声明了一个索引。


2. 全局插件

在前面的示例中,我们将插件添加到了所需要的模式中。如果需要在所有Schema中添加/注册一个插件,这时,可以通过mongoose的.plugin()方法来添加,通过mongoose添加插件即为“全局插件”。如:

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);


3. 官方插件

Mongoose团队维护了几个插件,可以为Mongoose添加了有用的新功能。如:


4. 社区支持

不仅可以在自己的项目中重用模式的功能,还可以从Mongoose社区中获益。任何发布到npm并使用mongoose标记的插件都会显示在官方的搜索结果页上。


变更记录

  • [2018-11-19] 基于Mongoose官方文档v5.3.12首次发布