2016-06-13 2 views
0

У меня есть схема, где пользователи отправляют запросы на перевод языка. Документ запроса на перевод имеет ссылку на пользовательские документы, а свойства называются «_requester» и «_translator». Я хочу иметь возможность заполнить их при выполнении запроса на сборке запроса на перевод. Проблема возникает, когда я выполняю определенный запрос, заполняя _translator, и результаты выглядят идеально. Тогда, если я сделаю то же самое требование, это не сработает второй раз с сообщением об ошибке: Schema не была зарегистрирована для модели «Пользователь».Ошибка Mongoose во второй раз с помощью Schema не зарегистрирована

Вот как это было закодировано в моем коде. Есть два файла. Один файл js, где сидит mongoose, и другой js-файл, который использует его через модель, какой-то, как инъекция зависимости.

(мангуст-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(); 

(перевод-запрос-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(); 

(как используется обработчик)

// following lines are executed twice by user's repeated action on UI 
var service = require('./translation-request-service); 
service.getTranslationResultById(id); 
+0

После некоторой отладки исходного кода Mongoose я обнаружил, что зарегистрированная схема пользователя больше не существует со второго запуска. Как исчезла модель, которая была зарегистрирована? Я неправильно использую Mongoose здесь? – jiminssy

ответ

0

Я исправил проблему, сразу же клонировав возвращаемый результат и выполнив свою логику. Я до сих пор не знаю, что могло бы вызвать эту проблему. Все, что я делаю, - это получить заполненный результат от моего веб-сокета к клиенту.

Смежные вопросы