0
我知道這已被問了一堆,但我一直無法弄清楚我在我的代碼中做錯了什麼。它阻止我能夠在飛機和贊助商上呼叫.populate(),但不能聯繫。這部分真的讓我感到困惑,因爲它們都是以同樣的方式創造出來的。MissingSchemaError:架構尚未註冊模型
堆棧跟蹤
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);
});
}
});
}
attendeesM odel.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;
你在哪裏架構定義? –
你正在調用一個註釋模式'// var Todos = require('../ models/todoModel');' –
嘗試添加var aircraft = require('./ pathTo/aircraft');到你的app.js –