2015-08-05 3 views
1

Я создаю свое первое веб-приложение в стеке MEAN и нахожусь в небольшой неприятности с Mongoose. Я вытащил свой код почти полностью из примеров, и попробовал все, что я нашел предложенное на подобные вопросы, но я все еще получаю ту же ошибку:Mongoose Schemea MissingSchemaError: Schema не зарегистрировано для модели

MissingSchemaError: Schema hasn't been registered for model "./models/Tests". 
Use mongoose.model(name, schema) 
    at Mongoose.model (/Users/goldru/design-data/node_modules/mongoose/lib/index.js:332:13) 
    at Object.<anonymous> (/Users/goldru/design-data/routes/index.js:16:21) 
    at Module._compile (module.js:460:26) 
    at Object.Module._extensions..js (module.js:478:10) 
    at Module.load (module.js:355:32) 
    at Function.Module._load (module.js:310:12) 
    at Module.require (module.js:365:17) 
    at require (module.js:384:17) 
    at Object.<anonymous> (/Users/goldru/design-data/app.js:12:14) 
    at Module._compile (module.js:460:26) 
    at Object.Module._extensions..js (module.js:478:10) 
    at Module.load (module.js:355:32) 
    at Function.Module._load (module.js:310:12) 
    at Module.require (module.js:365:17) 
    at require (module.js:384:17) 
    at Object.<anonymous> (/Users/goldru/design-data/bin/www:7:11) 

Код:

app.js:

//connect to db; require models 
var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost:27017/design-data-test'); 
var Test = require('./models/Tests'); 

var routes = require('./routes/index'); 
var users = require('./routes/users'); 

var express = require('express'); 
var app = express(); 

app.use('/', routes); 
app.use('/users', users); 

Tests.js:

var mongoose = require('mongoose'); 

var TestSchema = new mongoose.Schema({ 
    name: String 
}); 

mongoose.model('test', TestSchema); 

index.js:

var express = require('express'); 
var router = express.Router(); 

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    res.render('index', { title: 'Express' }); 
}); 

/*GET test page.*/ 
router.get('/test', function(req, res, next) { 
    res.render('test', { title: 'Express' }); 
}); 

//set up routes 
var mongoose = require('mongoose'); 
var Test = mongoose.model('./models/Tests'); 

router.get('/test', function(req, res, next) { 
    Test.find(function(err, tests) { 
     if(err) { 
      return next(err); 
     } 

     res.json(tests); 
    }); 
}); 

router.post('/test', function(req, res, next) { 
    var test = new Test(req.body); 

    Test.save(function(err,post) { 
     if(err) { 
      return next(err); 
     } 

     res.json(test); 
    }); 
}); 

module.exports = router; 

Любые предложения были бы очень оценены.

ответ

2

Вы называете модель test:

mongoose.model('test', TestSchema); 

Так что, если вы хотите, чтобы обратиться к нему по имени, вы должны использовать то же имя:

var Test = mongoose.model('test'); 

Я хотел бы предложить переименовать название модели до Test, что является соглашением Mongoose (но не обязательным требованием). Я бы также экспортировал его из вашего файла модели:

var mongoose = require('mongoose'); 

var TestSchema = new mongoose.Schema({ 
    name: String 
}); 

module.exports = mongoose.model('Test', TestSchema); 
Смежные вопросы