1. Plugins(插件)

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

假设我们的数据库中有多个集合,并且想要为每个集合添加「最后修改」的功能。用插件这很容易。只需创建一个插件并将其应用于每个模式:

// 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 模式,并在我们的 Game 的 lastMod 路径上声明一个索引。对于几行代码来说,这是不错的。

1.1. 全局插件

想要为所有模式注册一个插件? 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);

1.2. 社区!

您不仅可以在自己的项目中重新使用模式功能,还可以从 Mongoose 社区获得好处。任何发布到 npm 并带有 mongoose 标签的插件都会显示在我们的搜索结果页面上。

1.3. 接下来

现在我们已经介绍了插件,以及如何参与围绕它们的伟大社区,让我们来看看如何为 Mongoose 本身的持续发展做出贡献

Copyright © tuzhu008 2017 all right reserved,powered by Gitbook该文件修订时间: 2017-12-24 22:54:55

results matching ""

    No results matching ""