2016-08-19 83 views
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; 
+0

你在哪裏架構定義? –

+0

你正在調用一個註釋模式'// var Todos = require('../ models/todoModel');' –

+0

嘗試添加var aircraft = require('./ pathTo/aircraft');到你的app.js –

回答

0

看起來就像是一個區分大小寫的問題。

更改的情況:

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

現在它的工作原理。

相關問題