我有三个或四个方法在三个猫鼬模型中是相同的。有没有办法在一个文件中定义这些方法并包含它们?
aSchema.methods.onTimeout = function() {
// same do stuff like in bSchema
}
bSchema.methods.onTimeout = function() {
// same do stuff like in aSchema
}
答案 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