簡體   English   中英

MissingSchemaError:尚未為模型注冊模式,模式之前調用了mongoose.model

[英]MissingSchemaError: Schema hasn't been registered for model, mongoose.model called before schema

我從一開始就得到這樣的錯誤,這些是stacktrace行:

這是我的主節點服務器文件,我在其中加載路由

require('./config/routes')(app); 

這是路線文件,需要

var todos = require('../app/controllers/todos'); controller

這是控制器,在第2行上給出了錯誤:

var mongoose = require('mongoose'),
Todo = mongoose.model('Todo'),
_ = require('underscore');

這是我的模型文件,似乎沒有被調用:

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

var TodoSchema = new Schema({
    created: {
        type: Date,
        default: Date.now
    },
    content: {
        type: String,
        default: '',
        trim: true
    }
});

TodoSchema.path("content").validate(function(content) {
    return content.length;
}, 'Content cannot be blank');

mongoose.model("Todo", TodoSchema);

因此,如果我理解正確,我的問題是該行(內部控制器)的調用方式是:

Todo = mongoose.model('Todo')

在這行之前,在我的模型中:

mongoose.model("Todo", TodoSchema);

對? 但是,我從mean.io和其他幾個堆棧中取出了堆棧,並將它們放在一起。

讓我們看一下mean.io代碼,他們正在做同樣的事情:

server.js

require('./config/routes')(app, passport, auth);

然后進入routes.js,並編寫代碼:

var articles = require('../app/controllers/articles');

然后進入文章控制器:

var mongoose = require('mongoose'),
Article = mongoose.model('Article'),
_ = require('underscore');

這可以正常工作,但它與我的訂單完全相同。

在文件server.jshttps://github.com/linnovate/mean/blob/master/server.js )中,有一個函數被調用來自動加載模型:

//Bootstrap models
var models_path = __dirname + '/app/models';

var walk = function(path) {
    fs.readdirSync(path).forEach(function(file) {
        var newPath = path + '/' + file;
        var stat = fs.statSync(newPath);
        if (stat.isFile()) {
            if (/(.*)\.(js$|coffee$)/.test(file)) {
                require(newPath);
            }
        } else if (stat.isDirectory()) {
            walk(newPath);
        }
    });
};
walk(models_path);

這將加載/app/models目錄中定義的所有/app/models 這將需要引用了模型類型的控制器之前發生。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM