从MEAN.IO中的其他包加载模型

时间:2015-08-04 13:13:57

标签: javascript mean-stack meanjs mean.io

在以下项目结构中,我有2个自定义MEAN.IO包之间的依赖关系

/自定义

  • 包1
    • 服务器
      • 控制器
      • 路由
      • 模型
        • model1.js
  • 包2
    • 服务器
      • 控制器
      • 路由
      • 模型
        • model2.js

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中包含另一个包中的模型?

2 个答案:

答案 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);
}