![](/img/trans.png)
[英]MissingSchemaError: Schema hasn't been registered for model "User, userSchema". Use mongoose.model(name, schema)
[英]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.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
目錄中定義的所有/app/models
。 這將需要在引用了模型類型的控制器之前發生。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.