在以下项目结构中,我有2个自定义MEAN.IO包之间的依赖关系
/自定义
model1和model2都在他们自己的控制器中使用,但我想实现一个使用两者的算法。
我的第一个猜测是:
var Model2 = mongoose.model('Model2')
但这会返回错误:
MissingSchemaError: Schema hasn't been registered for model "Model2".
我的第二个猜测是再次包含模型:
var model = require('../../../package2/server/models/model2'),
Meeting = mongoose.model('Meeting'), ...
但仍然没有运气,是否有人知道如何在mean.io中包含另一个包中的模型?
答案 0 :(得分:0)
是的,你可以。
每个模型对象都由mongoose处理,因为mongoose是全局的,你可以只调用它的模式。
您必须使用mongoose.model(modelName,schema)将模型添加到mongoose
你的model.js中的
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
crypto = require('crypto'),
_ = require('lodash');
var Model1Schema = new Schema({ ... });
mongoose.model('Model1', ModelSchema);
在你的控制器中你可以这样称呼
var mongoose = require('mongoose'),
Model1 = mongoose.model('Model1'),
_ = require('lodash');
在这里查看更多信息 http://mongoosejs.com/docs/guide.html
答案 1 :(得分:0)
是的,似乎Model2还没有被时间初始化
var Model2 = mongoose.model('Model2')
被执行了。我认为mean.io按字母顺序加载包,这就是为什么在Model1初始化期间没有加载Model2的原因。你可以做的就是使用
mongoose.model('Model2')
在模型函数中重复执行,而不是将其放在变量中。
一个例子是
Model1Schema.statics.findUsingModel2 = function(model2Id,cb){
mongoose.model('Model2').find({_id : model2Id}).exec(cb);
}