gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:42:44 25 4
gpt4 key购买 nike

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

这是我的主 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com