gpt4 book ai didi

node.js - 静态方法的 Mongoose 继承

转载 作者:可可西里 更新时间:2023-11-01 09:27:22 25 4
gpt4 key购买 nike

我在 Node.js 应用程序中使用 Mongoose,我想使用模型的继承。我正在按照此处给出的说明进行操作 Inheritance in mongoose和其他链接,但我不知道如何继承静态方法。

这是我的尝试:

// The BaseSchema class :
function BaseSchema(objectName, schema) {
log.trace('BaseSchema CTOR : objectName=%s schema=%s', objectName, schema);
Schema.apply(this, [schema]);

var _objectName = objectName;
...
}
BaseSchema.prototype = new Schema();
BaseSchema.prototype.constructor = BaseSchema;

// !!! Here I try to expose the removeAll statics methods for all sub-schema !!!
BaseSchema.prototype.removeAll = function() { ... }

这里是继承类

// The inherited class
var AccountSchema = new BaseSchema('account', {
...
}
mongoose.model('Account', AccountSchema);

pb 是每次我尝试使用 removeAll 函数时。例如:

var Account = mongoose.model('Account');
Account.removeAll(function () {
done();
});

我收到此错误消息:

TypeError: Object function model(doc, fields, skipId) {
if (!(this instanceof model))
return new model(doc, fields, skipId);
Model.call(this, doc, fields, skipId);
} has no method 'removeAll'

我尝试了不同的组合来声明 removeAll 方法但没有成功:

BaseSchema.prototype.statics.removeAll = function() { ... }
BaseSchema.statics.removeAll = function() { ... }

提前感谢您的帮助!

JM.

最佳答案

我昨天遇到了同样的问题,最后做了这样的事情:

var Schema = require('mongoose').Schema;

function AbstractSchema() {
Schema.apply(this, arguments);

this.add({
name: String,
// ...your fields
});

this.statics.removeAll = function(){
this.remove({}).exec();
// ... your functionality
};
}

然后创建您的模型;mongoose.model('MyModel', new AbstractSchema())MyModel.removeAll(); 应该可以工作!

关于node.js - 静态方法的 Mongoose 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23876982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com