Ich habe ein Schema-Design, wo Benutzer Sprachübersetzungsanforderungen senden. Ein Übersetzungsanforderungsdokument verweist auf Benutzerdokumente, und die Eigenschaften werden "_requester" und "_translator" genannt. Ich möchte in der Lage sein, diese zu füllen, wenn ich eine Abfrage für die Sammlung von Übersetzungsanfragen durchführe. Problem tritt auf, wenn ich eine bestimmte Abfrage mache, den _translator auffüllen und die Ergebnisse perfekt aussehen. Dann, wenn ich genau die gleiche Abfrage mache, scheitert es zum zweiten Mal mit der Fehlermeldung Schema wurde nicht für das Modell "User" registriert.Mongoose wirft Fehler beim zweiten Mal mit Schema wurde nicht registriert
Hier ist, wie dies in meinem Code codiert wurde. Es gibt zwei Dateien. Eine js-Datei, wo der Mungo sitzt und eine andere js-Datei, die es über das Modell verwendet, was wie Dependency-Injektion.
(Mungo-util.js)
function MongooseUtil(){
var mongoose = require('mongoose');
var mongoosePaginate = require('mongoose-paginate');
var Schema = {
User: {
userId: String,
password: String,
nickName: String,
state: String,
emailVerificationCode: String,
avatarUrl: String,
points: Number
},
TranslationRequest: {
_requester: { type: mongoose.Schema.ObjectId, ref: "User" },
_translator: { type: mongoose.Schema.ObjectId, ref: "User" },
to: String,
from: String,
textToTranslate: String,
translatedText: String,
state: String,
requestedTime: Number,
translatedTime: Number,
gradedTime: Number,
grade: Number,
requesterUserId: String,
translatorUserId: String,
graderUserId: String
}
};
// user
var userSchema = mongoose.Schema(Schema.User);
var userModel = mongoose.model('User', userSchema);
// translation request
var translationRequestSchema = mongoose.Schema(Schema.TranslationRequest);
translationRequestSchema.plugin(mongoosePaginate);
var translationRequestModel = mongoose.model('TranslationRequest', translationRequestSchema);
this.getUserModel = function(){
return userModel;
}
this.getTranslationRequestModel = function(){
return translationRequestModel;
}
}
module.exports = new MongooseUtil();
(translation-request-service.js)
function TranslationRequestService(){
var mongooseUtil = require('../../../utils/mongoose-util/mongoose-util');
var TranslationRequest = mongooseUtil.getTranslationRequestModel();
var _this = this;
this.getTranslationResultById = function(id){
return TranslationRequest.findOne({ _id: id })
.populate('_translator', 'nickName avatarUrl')
.exec();
}
}
module.exports = new TranslationRequestService();
(wie die Behandlungsroutine verwendet wird)
// following lines are executed twice by user's repeated action on UI
var service = require('./translation-request-service);
service.getTranslationResultById(id);
Nach einigen Debugging im Mongoose-Quellcode fand ich, dass das Benutzerschema, das registriert worden war, nicht mehr vorhanden ist, seit es das zweite Mal ausgeführt wird. Wie könnte ein registriertes Modell verschwinden? Benutze ich Mongoose hier falsch? – jiminssy