J'ai un projet typique avec Node.js - Express 3 - MongoDB
J'essaie de faire une requête à mon modèle 'Tweet' dans mon/routes/index.js et quand je lance l'application qui tombe en panne
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...
Cela fait partie de mes 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);
Et cela fait partie de mon 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
});
};
quelle serait la bonne façon de faire cette requête?
Le fichier index.js
est exécuté là où votre fichier app.js
appelle:
var routes = require('./routes');
Assurez-vous donc que vous appelez après pour enregistrer le schéma 'Teewt'
en tant que modèle mangouste dans app.js
.
J'ai aussi cette erreur. A été dérouté pendant longtemps, en suivant ce fil et similaires, à l'aide, en essayant de déboguer. Finalement, le problème s’est avéré être dû à la version mangouste dans mon cas. J'essayais d'utiliser mongoose-fixture pour créer des données par défaut pour commencer dans mongo.
Essayez ceci: supprimez le répertoire node_modules
de votre projet, exécutez un npm cache clean
, puis un npm install
. Si cela ne vous aide pas, essayez de comparer les versions de mongoose
/mongoose-fixture
entre l'application problématique et celle qui fonctionne, essayez de modifier la version dans votre package.json
et de répéter les étapes ci-dessus. Cela a fonctionné pour moi.
Nommez votre schéma et votre modèle différemment. Re-déclarer Teewt
est une "mauvaise partie" javascript, ainsi qu'une erreur dans n'importe quel langage de programmation. Appelez simplement le schéma TeewtSchema
et le modèle Teewt
(car le schéma est généralement utilisé dans un seul fichier dans une application, mais le modèle peut être utilisé de manière extensive).
en d'autres termes, cette ligne (de app.js):
var Teewt = mongoose.model('Teewt', Teewt);
devrait être appelé après l'enregistrement du Tweet, sur cette ligne (dans index.js):
var Teewt = require('mongoose').model('Teewt');