У меня есть схема, где пользователи отправляют запросы на перевод языка. Документ запроса на перевод имеет ссылку на пользовательские документы, а свойства называются «_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);
После некоторой отладки исходного кода Mongoose я обнаружил, что зарегистрированная схема пользователя больше не существует со второго запуска. Как исчезла модель, которая была зарегистрирована? Я неправильно использую Mongoose здесь? – jiminssy