Простая схема удаляет значение объекта (объект состояния редактора Raw Editor) при очистке

Я использую версию Simple Schema для npm. У меня есть схема, определенная следующим образом:

const PageSchema = new SimpleSchema({
  organizationId: String,
  title: String,
  published: Boolean,
  slug: String,
  content: {
    type: Object,
    optional: true
  }
})

Значение 'content' предназначено для хранения данных, экспортированных из Draft JS с помощью функции convertToRaw в Draft. Однако, когда я очищаю данные с помощью Simple Schema, ключ/значение содержимого полностью удаляется из объекта. Никаких ошибок не выдается, он просто тихо удаляет этот узел.

Такого побочного эффекта я точно не ожидал. Есть ли что-то, чего я не понимаю в типе объекта Simple Schema? Ожидается ли, что я сначала сериализую объект как JSON или что-то в этом роде? Или, может быть, есть что-то в объектном литерале, экспортируемом Draft JS, что ему не нравится...?

Или возможно, что Draft JS делает что-то в своем экспорте объектов, что Simple Schema считает неортодоксальным? Это проблема с черновиком JS или проблема с простой схемой?

Вот console.log данных перед очисткой:

{ organizationId: 'JEsvMiJeTgexkAuzH',
  title: 'Test Title',
  published: true,
  slug: 'test-title',
  content: { entityMap: {}, blocks: [ [Object] ] } }

А вот так он выглядит после чистки:

{ organizationId: 'JEsvMiJeTgexkAuzH',
  title: 'Test Title',
  published: true,
  slug: 'test-title' }

Любые указатели/помощь будут очень признательны! Раньше я не пытался использовать литералы объектов в качестве значений при работе с метеорными данными, поэтому я уверен, что мне не хватает какой-то фундаментальной вещи.

ОБНОВЛЕНИЕ: я попытался вставить данные без предварительного вызова clean(), и на самом деле это работает просто отлично. Однако это, конечно, далеко не идеальный обходной путь. Но это говорит мне, что нет ничего о данных, против которых возражают Монго или коллекции метеоров.


person Dave Munger    schedule 10.08.2017    source источник


Ответы (1)


Я разобрался, просто я как-то упустил что-то очень существенное в документации Simple Schema:

Если у вас есть ключ с типом объекта, свойства объекта также будут проверены, поэтому вы должны определить все разрешенные свойства в схеме. Если это невозможно или вы не хотите проверять свойства объекта, используйте опцию blackbox: true, чтобы пропустить проверку всего внутри объекта.

До тех пор, пока я не определю ключи и содержимое, которые я последовательно ожидаю от Draft JS, я просто устанавливаю для черного ящика значение true, например так, поскольку я в основном согласен с доверием Draft JS к предоставлению правильных ключей объектов:

const PageSchema = new SimpleSchema({
  organizationId: String,
  title: String,
  published: Boolean,
  slug: String,
  content: {
    type: Object,
    blackbox: true,
    optional: true
  }
})

Это решило мою проблему, и теперь узел, содержащий объект экспортированного контента Draft JS, не удаляется при вызове Simple Schema clean.

person Dave Munger    schedule 12.08.2017