2016-06-13 5 views
0

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); 
+0

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

Antwort

0

Ich habe das Problem behoben, indem ich das zurückgegebene Ergebnis sofort geklont und meine Logik ausgeführt habe. Ich weiß immer noch nicht, was das Problem verursacht haben könnte. Alles, was ich mache, ist, das bevölkerte Ergebnis in meinem Web-Socket zum Client zu bekommen.

Verwandte Themen