如何在mongoose中的两个模型之间共享代码?

时间:2015-12-19 05:48:26

标签: node.js mongodb mongoose

我有三个或四个方法在三个猫鼬模型中是相同的。有没有办法在一个文件中定义这些方法并包含它们?

aSchema.methods.onTimeout = function() {
  // same do stuff like in bSchema
}

bSchema.methods.onTimeout = function() {
  // same do stuff like in aSchema
}

2 个答案:

答案 0 :(得分:3)

这就是mongoose插件功能的用途。

Obj1.prototype.stringify = function (key, val){ // if own attribute, return val; // else it is an Obj2 attribute, return Obj2.prototype.stringify(key, val) } Obj2.prototype.stringify = function (key, val){ if (key == "att1"){ return ""; } else if (key == "att2"){ return val; } }

timeout.plugin.js

然后您可以这样使用架构中的插件:

module.exports = exports = function(schema) {
  schema.methods.onTimeout = function() {
    console.log(this._id);
  };
};

您可以为希望var mongoose = require('mongoose'); var Schema = mongoose.Schema; var timeoutPlugin = require('./timeout.plugin'); var MySchema = new Schema({ // fields here }, {}); MySchema.plugin(timeoutPlugin); 提供的任何架构执行此操作。

答案 1 :(得分:2)

单独定义公共函数并将它们分配给它们

function onTimeout() {
  // same do stuff like in both
}

aSchema.methods.onTimeout = onTimeout

bSchema.methods.onTimeout = onTimeout

它可以在一个单独的文件中

在-timeout.js

module.exports = function onTimeout() {
  // same do stuff like in both
}

<强>一个-schema.js

var onTimeout = require('./on-timeout.js');
aSchema.methods.onTimeout = onTimeout