mongoose4.5中文教程
  • Introduction
  • Mongoose
  • guide
    • 模式(schemas)
      • 模式类型(types)
      • 自定义类型(custom)
    • 模型(models)
    • 文档(documents)
      • 子文档(sub docs)
      • 默认值(defaults)
    • 查询(queries)
    • 验证(validation)
    • 中间件(middleware)
    • 联表(population)
    • 连接(connections)
    • 插件(plugins)
    • 承诺(promises)
    • 鉴频器(discriminators)
    • 贡献
    • ES2015 整合
    • 浏览器中的schemas
    • 自定义schema类型
    • MongoDB版本兼容性
    • 3.6 发布说明
    • 3.8 发布说明
    • 4.0 发布说明
  • API 文档
Powered by GitBook
On this page
  • Plugins
  • 全局的Plugins
  • 社区!
  • 下一步

Was this helpful?

  1. guide

插件(plugins)

Previous连接(connections)Next承诺(promises)

Last updated 6 years ago

Was this helpful?

原文: 翻译:小虾米(QQ:509129)

Plugins

Schemas是可插拔的,那就是,他们允许使用预包装的能力,扩展他们的功能。这是一个非常强大的功能。

假设我们有几个集合在我们的数据库中,并要为每一个添加最后修改的功能。有了插件,这是很容易。只需要创建一个插件一次,并将其应用到每个Schemas:

// 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的schemas,并声明了一个在我们的Games上的lastMod索引。不坏的几行代码。

全局的Plugins

想注册一个插件为所有schemas吗?mongoose单独有一个plugin()功能为每一个schema注册插件。例如:

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社区中获利。任何插件发布到,打上mongoose的会在我们的页面显示。

现在我们已经掌握了插件和如何参与到伟大的社会成长周围,让我们来看看如何可以帮助Mongoose本身的不断发展。

Plugins
NPM
标签
搜索结果
贡献