Порядок выполнения проверки метеоритного сбора и простой схемы различен на сервере и клиенте

Я использую collection2, simple-schema и meteor-collection-hooks.

Первый тест

// posts.js
Posts = new Mongo.Collection("posts");

Posts.before.insert((userId, doc) => {
  console.log('Should see this');
});

////////////////////////////////////////////////////////////////
// Works fine both in meteor shell and console:
Posts.insert({title: 'some title'});

Второй тест

// posts.js
Posts = new Mongo.Collection("posts");

Posts.attachSchema(new SimpleSchema({
  title: {
    type: String,
  },
  slug: {
    type: String,
  }
}));

Posts.before.insert((userId, doc) => {
  console.log('POSTS BEFORE INSERT');
  doc.createdAt = Date.now();
  doc.slug = 'whatever';
});

Posts.allow({
  insert: function() {return true},
  update: function() {return true},
  remove: function() {return true}
});

////////////////////////////////////////////////////////////////
// Then in meteor shell:
Posts.insert({title: 'some title'}); // validation error. No console.log. No Post inserted.
//
// Error: Slug is required
//    at getErrorObject (packages/aldeed_collection2/packages/aldeed_collection2.js:425:1)
//    at [object Object].doValidate (packages/aldeed_collection2/packages/aldeed_collection2.js:408:1)
//

////////////////////////////////////////////////////////////////
// In the chrome console:
Posts.insert({title: 'some title'}); // works just fine. I have a post with a title, slug and created_at

Во втором моем тесте в оболочке meteor проверка выполняется перед хуком, поэтому сообщение недействительно, а хук вообще не выполняется (для правильности необходимо сначала пройти через хук).

Интересно, что у меня нет этой проблемы, пока на клиенте. На клиенте порядок выполнения кажется действительным: подключите ТО к проверке.

У вас такое же поведение? Есть идеи, почему на сервере другой порядок?


Обходной путь должен сделать это на сервере:

Posts.insert({title: 'some title'}, {validate: false});

Но я теряю подтверждение, которое я хотел бы сохранить...

Смотрите выпуск Github

0 ответов

Другие вопросы по тегам