it-swarm.com.de

MissingSchemaError: Das Schema wurde nicht für das Modell registriert

Ich habe ein typisches Projekt mit Node.js - Express 3 - MongoDB

Ich versuche, eine Abfrage an mein Modell 'Tweet' in meiner /routes/index.js zu stellen, und wenn ich meine App starte, stürzte ich ab

24 Aug 11:35:07 - [nodemon] starting `node app.js`

/Applications/XAMPP/xamppfiles/htdocs/ocesa/fanocesa/node_modules/mongoose/lib/index.js:286
  throw new mongoose.Error.MissingSchemaError(name);
        ^
MissingSchemaError: Schema hasn't been registered for model "Teewt".
Use mongoose.model(name, schema)
at Mongoose.model (/Applications/XAMPP/xamppfiles/htdocs/ocesa/fanocesa/node_modules/mongoose/lib/index.js:286:13)
at Object.<anonymous> (/Applications/XAMPP/xamppfiles/htdocs/ocesa/fanocesa/routes/index.js:6:33)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/Applications/XAMPP/xamppfiles/htdocs/ocesa/fanocesa/app.js:7:14)
at Module._compile (module.js:456:26)
24 Aug 11:35:07 - [nodemon] app crashed - waiting for file changes before starting...

Dies ist Teil meiner app.js

var mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/fanOcesa');
var Schema = mongoose.Schema;
var ObjectID = Schema.ObjectID;

var Teewt = new Schema({
    cuerpo: String
});

var Teewt = mongoose.model('Teewt', Teewt);

var app = express();

app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);

Und das ist Teil meiner index.js

var Teewt = require('mongoose').model('Teewt');

Teewt.find({}, function(err, docs){
    console.log('docs');
    console.log(docs);
});

exports.index = function(req, res){
    res.render('index', { 
        docs: docs
    });
};

welches wäre der richtige Weg für diese Abfrage?

21
Andres Vargas

Die index.js-Datei wird ausgeführt, wenn Ihre app.js-Datei aufgerufen wird:

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

Stellen Sie also sicher, dass dies after Ihre Aufrufe zur Registrierung des 'Teewt'-Schemas als Moose-Model in app.js heißt.

50
JohnnyHK

Ich habe auch diesen Fehler erhalten. War lange Zeit ratlos, folgte diesem und ähnlichen Threads um Hilfe und versuchte zu debuggen. Letztendlich stellte sich heraus, dass das Problem in meinem Fall auf die Mungo-Version zurückzuführen war. Ich habe versucht, mit dem Mongoose-Fixture einige Standarddaten zu samen, um mit dem Mongo zu beginnen. 

Versuchen Sie Folgendes: Löschen Sie das node_modules-Verzeichnis Ihres Projekts, führen Sie einen npm cache clean und dann einen npm install aus. Wenn auch dies nicht hilft, vergleichen Sie die Versionen von mongoose/mongoose-fixture zwischen der problematischen und der funktionierenden App, und ändern Sie die Version in Ihrem package.json. Wiederholen Sie die obigen Schritte. Das hat bei mir funktioniert.

1
Avik Ray

Benennen Sie Ihr Schema und Modell anders. Das erneute Deklarieren von Teewt ist sowohl ein "schlechter Teil" von Javascript als auch ein Fehler in jeder Programmiersprache. Rufen Sie einfach das Schema TeewtSchema und das Modell Teewt auf (da das Schema normalerweise nur in einer Datei einer Anwendung verwendet wird, das Modell jedoch möglicherweise umfangreich verwendet wird).

1
Peter Lyons

mit anderen Worten, diese Zeile (aus app.js):

var Teewt = mongoose.model('Teewt', Teewt);

sollte aufgerufen werden, nachdem der Tweet in dieser Zeile (in index.js) registriert wurde:

var Teewt = require('mongoose').model('Teewt');
0
Aviram Net