MEAN.JS MissingSchemaError

时间:2015-01-31 14:34:27

标签: javascript angularjs node.js mongoose meanjs

我和MEAN.JS一起玩,看看我喜欢它,我得到了一个我通常可以解决的错误,但这次我似乎无法弄清楚我可能做错了什么。

我尝试使用mongooses populate方法填充子对象,但我现在收到此错误:MissingSchemaError: Schema hasn't been registered for model "topic"这是有道理的...确保"主题&# 34;模型架构已加载。我认为它应该根据MEAN.js

中的加载顺序加载

moment.server.model.js

'use strict';

/**
 * Module dependencies.
 */
var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

/**
 * Moment Schema
 */
var MomentSchema = new Schema({
    name: {
        type: String,
        default: '',
        required: 'Please fill Moment name',
        trim: true
    },
    content: {
        type: String,
        default: '',
        trim: true
    },
    created: {
        type: Date,
        default: Date.now
    },
    topic: {
        type: Schema.ObjectId,
        ref: 'Topic'
    },
    user: {
        type: Schema.ObjectId,
        ref: 'User'
    }
});

mongoose.model('Moment', MomentSchema);

topic.server.model.js

'use strict';

/**
 * Module dependencies.
 */
var mongoose = require('mongoose'),
    Schema = mongoose.Schema,
    moment = require('moment-timezone');

/**
 * Topic Schema
 */
var TopicSchema = new Schema({
    name: {
        type: String,
        default: '',
        required: 'Please fill Topic name',
        trim: true
    },
    created: {
        type: Date,
        default: Date.now
    },
    user: {
        type: Schema.ObjectId,
        ref: 'User'
    },
    moments: [
        {
            type: Schema.ObjectId,
            ref: 'Moment'
        }
    ]
});

mongoose.model('Topic', TopicSchema);

导致错误的查询:

Moment.find().sort('-created').populate('user', 'displayName', 'topic').exec(function(err, moments) { ... }

可能导致此错误的原因以及如何解决?我之前在其他节点系统中已经解决了这个问题,但是我觉得我错过了一些基本的东西。

1 个答案:

答案 0 :(得分:0)

想出来。我忽略了如何正确使用填充。为了解决这个问题,我简单地将另一个填充调用链接到另一个dbRef值:

 Moment.find()
    .sort('-created')
    .populate('user', 'displayName')
    .populate('topic')
    .exec(function(err, moments) { 
        // do stuff with results
    });

现在填充主题和用户名。

刚给自己写了一张便条,名为:RTFM。