Почему при сохранении модели с помощью Mongoose.js я получаю сообщение «не могу вызвать doValidate of undefined»? - PullRequest
0 голосов
/ 16 апреля 2011

Может кто-нибудь помочь, попытаться объяснить, что я делаю неправильно, используя ORM mongoose.js, и дать мне несколько советов, как решить проблему.

Проблема

При попытке сохранить модель с помощью mongoose.js orm я получаю сообщение об ошибке:

Невозможно вызвать метод doValidate с неопределенным значением

Определение схемы

Я пытаюсь сохранить объект с помощью этой схемы:

var myEntity = new Schema({
  objectId            : ObjectId
  ,title             : String
  , decription        : String
  , ownerId           : String
  , start               : {
     something : {
      // ...
     }
   //removed for brevity!
  }
  , end             : {
     something : {
      // ...
     }
   //removed for brevity!
    }
  , useruid           : String
  , _created          : { type : Date, "default": new Date()}
  , _updated          : { type : Date, "default": new Date()}
}
mongoose.model("MyEntity", MyEntity);

Определение моделей

Я поместил модели в контейнер, чтобы я мог получить к ним доступ, выполнив:

var xyz = new models['whatever']();

Контейнерный объект выглядит так:

var models = {
  MyEntity : mongoose.model("MyEntity"),
};

Создание модели

Я создаю модель, передавая объект JSON со всеми правильными «отображениями» или атрибутами:

var newEntity = new models.MyEntity(someObj);

Сохранение модели

Тогда код ниже, как сохранить модель:

newEntity.save(function(error) {

                  if (error) {
                    console.log(error);
                  }

                  writePostEntityResponse(newEntity);
                });

Я не вижу, что я делаю неправильно, и сообщение об ошибке, хотя и ясно, не очень мне помогает.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2011

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

Mongo создает ObjectIds автоматически.Вы пытались удалить это поле и посмотреть, что произойдет?

0 голосов
/ 16 апреля 2011

Порядок должен быть важным. Если вы определите models до того, как присоедините схему к моделям, то вы будете иметь дело с правильными объектами.

var schema = new Schema(...);
mongoose.model('ModelName', mySchema)
var models = {
    "foo": mongoose.model('ModelName')
}
var xyz = new models['foo']();
xyz.save();

Что касается сообщения об ошибке, у mongoose есть система проверки в сборке, поэтому всякий раз, когда вы сохраняете ее, она будет проверяться. По умолчанию нет правил проверки, поэтому он ничего не делает. Опять же, похоже, что в объекте модели, который вы пытаетесь сохранить, чего-то не хватает, может быть, схема, а может и код проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...