MissingSchemaError: Schéma n'a pas été enregistré pour le modèle “Utilisateur”
Dans mon models/user.js
fichier:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var userSchema = new Schema({
(define schema)
});
...
(save user)
...
(check password)
...
mongoose.model('User', userSchema);
Et dans mon router/index.js
, j'ai:
var mongoose = require('mongoose');
var User = mongoose.model('User');
qui génère l'erreur:
MissingSchemaError: Schema hasn't been registered for model "User".
Si toutefois, dans user.js
, je suis dans la dernière ligne)
module.exports = mongoose.model('User', userSchema);
et dans index.js
je ne var User = require('../models/User');
, alors tout fonctionne.
Mais il ne faut pas, parce que dans config/pass.js
je suis en train de faire var User = mongoose.model('User');
, et il fonctionne parfaitement.
La require('../models/User');
syntaxe ne fonctionne pas sur Ubuntu, mais sur mon Mac.
Que dois-je faire? Comment puis-je résoudre ce problème? J'ai regardé des tonnes d'exemples d'applications, y compris MOYENNE mais rien n'a été vraiment utile.
- J'ai rencontré un problème similaire, et même si la réponse de @verybadalloc a été utile, je voulais voir si je pouvais le résoudre d'une autre manière. Puis, quand j'ai défait mes modifications, il fonctionnait toujours. Alors, maintenant, je suis encore confus, mais votre question et la réponse aidé. J'ai essayé de changer mon exportations également d'exporter le schéma, et qui semblait l'aider, mais maintenant, je ne suis pas entièrement sûr de ce qui a fonctionné depuis abolir les changements ne semble pas avoir d'impact.
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème quand je suis en train de la MOYENNE tutoriel.
Après avoir fait un peu de recherche, j'ai trouvé que dans app.js si j'ai mis require("./modèles/Utilisateur") avant de var itinéraires = require("./routes/index"), puis il travaille.
Comme ceci:
Espère que la réponse sera utile!
L'erreur se produit car le
models/user.js
n'a pas été interprété par le tempsrouter/index.js
a été chargé. Une façon de résoudre ce problème serait de faire ce qui suit:Cela, cependant, s'avère être à l'encontre des meilleures pratiques, qui dicte que toute cette config trucs qui devrait arriver au début de votre
app.js
fichier. Regardez cet exemple de madhums' exemple de projetRemarque qu'il est le chargement de ses modèles avant de l'application du routeur.
Comme pour Ubuntu vs Mac question, je crois que c'est parce qu'un chemin relatif dans Ubuntu a commencer avec
./
. Vous avez juste à changer de./../models/user.js
, qui fonctionne sur Mac../
travaillé dans les deux systèmes, mais./
ne fonctionne pas sur Ubuntu.Tout le code dans votre mangouste schéma js fichiers ne devraient pas fonctionner avant qu'il soit utilisé dans d'autres fichiers.
Par exemple, l'extrait de code suivant permet de s'assurer de la mangouste fichiers de schéma/les modules sont exécutés.
ou les fichiers de schéma peut être exécutée manuellement en appelant
avant les modèles sont utilisés n'importe où dans l'application.
Une fois que le dessus est fait, d'autres modules qui utilise mangouste modèles peuvent être requis/exécuté.
Ce problème se produit lorsque vous essayez d'obtenir le modèle avant de charger le fichier de modèle de charge
J'ai résolu le même problème dans mon veux dire.io projet
Dans le contrôleur:
Dans l'utilisation de l'express, l'un des erreur commune est, en exigeant de l'express avant de la mangouste. Ce résultats pour "MissingSchemaError: Schéma n'a pas été enregistré pour le modèle "Utilisateur"." erreur.
Vous pouvez facilement le fixer en modifiant le "besoin" de l'ordre (j'.e mangouste ensuite express)
J'ai eu cette erreur en essayant d'utiliser
mongoose-fixture
de semences de certaines données par défaut dans un mongo collection. A été dérouté pour longtemps, à la suite de ce type de threads pour obtenir de l'aide, essayez de déboguer. En fin de compte, la question s'est avéré être en raison demongoose
etmongoose-fixture
versions dans mon cas.Si aucun changement de code d'aide, ou si vous obtenez cette erreur lors de la tentative d'utiliser correctement
mongoose-fixture
(qui est censé enregistrer vos schémas pour vous), essayez ceci. Supprimer lanode_modules
dir de votre projet, d'exécuter unenpm cache clean
, puis unnpm install
.Même si cela ne vous aide pas, essayez de comparer les versions de
mongoose
/mongoose-fixture
entre la problématique de l'application et un qui fonctionne, et essayez de changer la version de votrepackage.json
, et en répétant les étapes ci-dessus. Cela a fonctionné pour moi.J'ai aussi expérimenté cette erreur avec ES6/Tapuscrit. Même j'ai importé le modèle, l'erreur persiste. Selon les docs ici
MongooseError.MissingSchemaError
Les conseils était juste pour s'assurer que l'utilisation de ce modèle explicitement, de sorte qu'un changement
ref:"Company"
enref:Company.modelName
semblait fixé.J'espère que ça aide certains d'entre vous
J'ai rencontré ce problème lorsque j'essaye d'ajouter un nouveau modèle sur la base de code de ce tutoriel Authentification de l'utilisateur sur la MOYENNE de la pile. La solution est comme ce Ahei mentionné.
Plus précisément, j'ai besoin d'ajouter une ligne
require('path/to/your/model')
à la fin de/app_api/models/db.js
qui est nécessaire à laapp.js
. Il est préférable de garder la cohérence de la structure pour la facilité de développement.Je suis récemment tombé sur une solution similaire pour les réponses fournies par @rajkumar-nagarajan et @verybadalloc.
J'aime cette approche mieux, car il évite l'itération n+1, et il ne lit pas tous les modèles à partir du système de fichiers.
Dans
app/models/index.js
, demander à chaque fichier de modèle:Puis, dans
/app.js
ou/index.js
(selon votre projet, vous pouvez tout simplement faire:La partie qui me manque (des conseils appréciés ici) --comment enregistrer facilement chaque modèle par un nom comme:
J'ai été faire une autre erreur que j'ai créé la collection de schéma et de son modèle correctement, mais le problème est que je n'ai pas utilisé de modèle de schéma (insert, update, lire et supprimer la doc).
c'est à dire que j'ai créé la collection quelque chose comme ça:
mais ne pas utiliser ou appeler
PlayerSchema
modèle quelque part, c'est pourquoi obtenir cette erreurEx.
Dans l'exemple ci-dessous, vous obtiendrez
MissingSchemaError: Schema hasn't been registered for model “Role”
si vous ne le faites pasconst Role = require("./role");
Dans mon cas, c'est arrivé à cause de capital et/ou de petite lettre de la confusion.
Modèle utilisateur a ceci:
Et modèle de Produit avait une référence à l'Utilisateur de modèle, mais de petits cas:
Si vous utilisez le Mean.js pile, de l'exécution du test avec:
Et pas avec