简体   繁体   中英

MissingSchemaError: Schema hasn't been registered for model

I know this has been asked a bunch but I haven't been able to figure out what I am doing wrong in my code. It is preventing me from being able to call the .populate() on aircraft and sponsor but not on contact. That part is really confusing me because they were all created the same way.

Stack trace

    MissingSchemaError: Schema hasn't been registered for model "aircraft".
Use mongoose.model(name, schema)
at NativeConnection.Connection.model (C:\Users\Nick Elliott\WebstormProjects\untitled1\node_modules\mongoose\lib\connection.js:718:11)
at getModelsMapForPopulate (C:\Users\Nick Elliott\WebstormProjects\untitled1\node_modules\mongoose\lib\model.js:2968:18)
at populate (C:\Users\Nick Elliott\WebstormProjects\untitled1\node_modules\mongoose\lib\model.js:2608:15)
at _populate (C:\Users\Nick Elliott\WebstormProjects\untitled1\node_modules\mongoose\lib\model.js:2576:5)
at Function.Model.populate (C:\Users\Nick Elliott\WebstormProjects\untitled1\node_modules\mongoose\lib\model.js:2536:5)
at Immediate.cb (C:\Users\Nick Elliott\WebstormProjects\untitled1\node_modules\mongoose\lib\query.js:1089:17)
at Immediate._onImmediate (C:\Users\Nick Elliott\WebstormProjects\untitled1\node_modules\mongoose\node_modules\mquery\lib\utils.js:137:16)
at processImmediate [as _immediateCallback] (timers.js:383:17)

App.js

var express = require('express');
var app = express();
var mongoose = require('mongoose');
var config = require('./config');
var setupController = require('./controllers/setupController');
var apiController = require('./controllers/apiController');

var port = process.env.PORT || 3000;

app.use('/assets', express.static(__dirname + '/public'));

app.set('view engine', 'ejs');


apiController(app);
setupController(app);
mongoose.connect(config.getDbConnectionString());


app.listen(port);

apiController.js

 var Todos = require('../models/todoModel'); var Attendees = require('../models/attendeesModel'); var Sponsor = require('../models/sponsorsModel'); var Event = require('../models/eventsModel'); var Aircraft = require('../models/aircraftModel'); var bodyParser = require('body-parser'); module.exports = function(app) { app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); /* TODOS API */ app.get('/api/todos/:uname', function(req, res) { Todos.find({ username: req.params.uname }, function(err, todos) { if (err) throw err; res.send(todos); }); }); app.get('/api/todo/:id', function(req, res) { Todos.findById({ _id: req.params.id }, function(err, todo) { if (err) throw err; res.send(todo); }); }); app.post('/api/todo', function(req, res) { if (req.body.id) { Todos.findByIdAndUpdate(req.body.id, { todo: req.body.todo, isDone: req.body.isDone, hasAttachment: req.body.hasAttachment }, function(err, todo) { if (err) throw err; res.send('Success'); }); } else { var newTodo = Todos({ username: 'test', todo: req.body.todo, isDone: req.body.isDone, hasAttachment: req.body.hasAttachment }); newTodo.save(function(err) { if (err) throw err; res.send('Success'); }); } }); app.delete('/api/todo', function(req, res) { Todos.findByIdAndRemove(req.body.id, function(err) { if (err) throw err; res.send('Success'); }) }); /* Attendees API */ app.get('/api/people/', function(req, res) { Attendees .find({}) .populate('aircraft') .exec(function(err, attendee) { if (err) throw err; res.send(attendee); }); }); app.get('/api/person/:fname', function(req, res) { Attendees.find({ firstname: req.params.fname }, function(err, attendee) { if (err) throw err; res.send(attendee); }); }); app.get('/api/personbyid/:id', function(req, res) { Todos.findById({ _id: req.params.id }, function(err, attendee) { if (err) throw err; res.send(attendee); }); }); app.post('/api/person', function(req, res) { if (req.body.id) { Attendees .findByIdAndUpdate(req.body.id, { firstname: req.body.firstname, lastname: req.body.lastname, phonenumber: req.body.phonenumber, tailnumber: req.body.tailnumber, address: req.body.address, email: req.body.email, FAASemail: req.body.FAASemail, model: req.body.model, confirmed: req.body.confirmed, pilot: req.body.pilot },{new: true}, function(err, Attendees) { if (err) throw err; res.send(Attendees); }); } else { var newAttendee = Attendees({ firstname: req.body.firstname, lastname: req.body.lastname, phonenumber: req.body.phonenumber, tailnumber: req.body.tailnumber, address: req.body.address, email: req.body.email, FAASemail: req.body.FAASemail, model: req.body.model, confirmed: req.body.confirmed, pilot: req.body.pilot }); newAttendee.save(function(err) { if (err) throw err; res.send(newAttendee); }); } }); /* Sponsor API */ app.get('/api/sponsor/', function(req, res) { Sponsor .find({}) .populate('contact') //.populate('sponsors') Doesn't work yet .exec(function (err, sponsor) { if (err) return handleError(err); res.send(sponsor); }); }); app.get('/api/sponsorbyname/:ename', function(req, res) { Sponsor.find({ name: req.params.ename }, function(err, event) { if (err) throw err; res.send(event); }); }); app.get('/api/sponsorbyid/:id', function(req, res) { Sponsor .findById({ _id: req.params.id }) .populate('contact') .exec(function (err, sponsor) { if (err) throw err; res.send(sponsor); }); }); app.post('/api/sponsor', function(req, res) { if (req.body.id) { Sponsor.findByIdAndUpdate(req.body.id, { name: req.body.name, contact: req.body.contact, image: req.body.image, link: req.body.link }, {new: true}, function(err, Sponsor) { if (err) throw err; res.send(Sponsor); }); } else { var newSponsor = Sponsor({ name: req.body.name, contact: req.body.contact, image: req.body.image, link: req.body.link }); newSponsor.save(function(err) { if (err) throw err; res.send(newSponsor); }); } }); /* Event API */ app.get('/api/event/', function(req, res) { Event .find({}) //.populate('sponsors') .populate('attendees') .exec(function (err, event) { if (err) return handleError(err); res.send(event); }); }); app.get('/api/event/:ename', function(req, res) { Event.find({ name: req.params.ename }, function(err, event) { if (err) throw err; res.send(event); }); }); app.get('/api/event/:id', function(req, res) { Todos.findById({ _id: req.params.id }, function(err, event) { if (err) throw err; res.send(event); }); }); app.post('/api/event', function(req, res) { if (req.body.id) { Event.findByIdAndUpdate(req.body.id, { name: req.body.name, narrative: req.body.name, startdate: req.body.startdate, enddate: req.body.enddate, site: req.body.site }, {new: true}, function(err, Event) { if (err) throw err; res.send(Event); }); } else { var newEvent = Event({ name: req.body.name, narrative: req.body.name, startdate: req.body.startdate, enddate: req.body.enddate, site: req.body.site }); newEvent.save(function(err) { if (err) throw err; res.send(newEvent); }); } }); /* Aircraft API */ app.post('/api/aircraft', function(req, res) { if (req.body.id) { Aircraft .findByIdAndUpdate(req.body.id, { tailnumber: req.body.tailnumber, model: req.body.model }, {new: true}, function(err, Event) { if (err) throw err; res.send(Event); }); } else { var newAircraft = Aircraft({ tailnumber: req.body.tailnumber, model: req.body.model }); newAircraft.save(function(err) { if (err) throw err; res.send(newAircraft); }); } }); } 

attendeesModel.js

var mongoose = require('mongoose');

var Schema = mongoose.Schema;

var attendeeSchema = new Schema({
firstname: String,
lastname: String,
phonenumber: String,
tailnumber: String,
address: String,
email: String,
FAASemail: String,
model: String,
confirmed: Boolean,
pilot: Boolean,
aircraft: [{ type: Schema.Types.ObjectId, ref: 'aircraft'}]
});

var Attendees = mongoose.model('Attendees', attendeeSchema);

module.exports = Attendees;

aircraftModel.js

var mongoose = require('mongoose');

var Schema = mongoose.Schema;

var aircraftSchema = new Schema({
tailnumber: String,
model: String
});

var Aircraft = mongoose.model('Aircraft', aircraftSchema);

module.exports = Aircraft;

Looks like it was a case sensitive issue.

Changed case in:

var Attendees = mongoose.model('Attendees', attendeeSchema);
var Aircraft = mongoose.model('Aircraft', aircraftSchema);

now it works.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM