2016-08-19 6 views
0

registriert. Ich weiß, das wurde ein Haufen gefragt, aber ich konnte nicht herausfinden, was ich in meinem Code falsch mache. Es hindert mich daran, das .populate() auf Flugzeug und Sponsor zu nennen, aber nicht auf Kontakt. Dieser Teil verwirrte mich wirklich, weil sie alle auf die gleiche Weise erschaffen wurden.MissingSchemaError: Das Schema wurde nicht für das Modell

Stapelüberwachung

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; 
+0

Wo ist Ihre Schemadefinition? –

+0

Sie rufen ein kommentariertes Schema auf // var Todos = require ('../ models/todoModel'); ' –

+0

versuchen Sie, var aircraft = require ('./ pathTo/aircraft') hinzuzufügen; zu deiner app.js –

Antwort

0

Sieht aus wie es ein Fall heikles Thema war.

Changed Fall in:

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

jetzt funktioniert es.

Verwandte Themen