Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mongoose Schema hasn't been registered for model

I'm learning the mean stack and when I try to start the server using

npm start 

I get an exception saying that:

schema hasn't been registered for model 'Post'. Use mongoose.model(name, schema) 

here is my code inside /models/Posts.js

var mongoose = require('mongoose');  var PostSchema = new mongoose.Schema({     title: String,     link: String,      upvotes: { type: Number, default: 0 },     comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }] });  mongoose.model('Post', PostSchema); 

as I can see the schema should be registered for the model 'Post', but what can be possibly causing the exception to be thrown?

Thanks in advance.

Edit: Here's the exception error

/home/arash/Documents/projects/personal/flapper-news/node_modules/mongoose/lib/index.js:323   throw new mongoose.Error.MissingSchemaError(name);         ^ MissingSchemaError: Schema hasn't been registered for model "Post". Use mongoose.model(name, schema) 

and here's the app.js code with the mongoose initialization:

var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/news'); require('./models/Posts'); require('./models/Comments'); 

before the line:

app.use('/', routes); 
like image 283
arash moeen Avatar asked Nov 08 '14 14:11

arash moeen


1 Answers

It's not an issue with model export. I had the same issue.

The real issue is that require statements for the models

var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/news'); require('./models/Posts'); require('./models/Comments'); 

were below the routes dependencies. Simply move the mongoDB dependencies above the routes dependencies. This is what it should look like:

// MongoDB var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/news'); require('./models/Posts'); require('./models/Comments');  var routes = require('./routes/index'); var users = require('./routes/users');  var app = express(); 
like image 54
user8264 Avatar answered Sep 20 '22 09:09

user8264