MissingSchemaError:尚未为模型注册架构

时间:2016-08-19 21:45:43

标签: javascript node.js mongoose

我知道这已被问到一堆但我无法弄清楚我的代码中出错了什么。它阻止我能够在飞机和赞助商上调用.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;

1 个答案:

答案 0 :(得分:0)

看起来这是一个区分大小写的问题。

更改案例:

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

现在可行。