我知道这已被问到一堆但我无法弄清楚我的代码中出错了什么。它阻止我能够在飞机和赞助商上调用.populate()但不能联系。那部分真的让我感到困惑,因为它们都以同样的方式创造。
堆栈跟踪
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);
});
}
});
}
与会者模型.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;
答案 0 :(得分:0)
看起来这是一个区分大小写的问题。
更改案例:
var Attendees = mongoose.model('Attendees', attendeeSchema);
var Aircraft = mongoose.model('Aircraft', aircraftSchema);
现在可行。