node.js - MissingSchemaError : Schema hasn't been registered for model, mongoose.model 在模式之前调用

标签 node.js mongodb express

我收到这样的错误,这些是堆栈跟踪行,从一开始:

这是我的主 Node 服务器文件,我在其中加载路由

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

这是路由文件,需要

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

这是 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);

所以如果我理解正确的话,我的问题是这条线( Controller 内部)被调用:

Todo = mongoose.model('Todo')

在我的模型中的这一行之前:

mongoose.model("Todo", TodoSchema);

对吗?不过,我从mean.io 和其他一些网站获取了堆栈,并将其放在一起。

让我们看看mean.io代码,他们正在做同样的事情:

服务器.js

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

然后进入routes.js,代码:

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

然后进入文章 Controller :

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

这工作正常,但与我的顺序完全相同。

最佳答案

在文件 server.js ( https://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 目录中定义的所有模型。这需要在引用模型类型的 Controller 之前发生。

关于node.js - MissingSchemaError : Schema hasn't been registered for model, mongoose.model 在模式之前调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20168462/

相关文章:

javascript - Node - 如何从本地文件正确读取 json?

node.js - MongoDB 和 Mongoose 的区别

javascript - 在 express js 中允许多个 CORS 域

mongodb - 如何删除mongodb中的数组元素

javascript - 如何仅使用一个关键字搜索 MongoDB 集合中的所有键

node.js - 如何向express/nodejs中的静态gzip文件添加 header ?

node.js - 获取http ://localhost/socket. io/?EIO=3&transport=polling&t=LjIvLGU 404(未找到)

node.js - 如何使用 Node 单元和 Mongoose 返回异步结果?

javascript - 'sort'方法在chrome环境和node环境有什么区别

javascript - 如何使用 Nodejs、Expressjs 和 bluebird 调用第二个 "external"函数