Неизвестный ключ в поле XXX при использовании упрощенной схемы - PullRequest
0 голосов
/ 18 мая 2018

Я использовал только aldeed:simple-schema в своем проекте с пакетами check и audit-argument-checks. Функция проверки с использованием моей SimpleSchema работала нормально .

Но тогда я захотел использовать collection2.Collection2 нужен пакет npm simpl-schema.Когда я установил aldeed:collection2 и пакет npm simpl-schema, мои проверки с использованием SimpleSchema перестали работать и теперь показывают следующую ошибку:

Ошибка: ошибка сопоставления: неизвестный ключ в заголовке поля

Check () работает с aldeed:simple-schema, но не с пакетом npm simpl-schema.

import SimpleSchema from 'simpl-schema';

NoteUpsertSchema = new SimpleSchema({
  title: {
    type: String,
    max: 50
  },
  description: {
    type: String,
    max: 500
  }
});

Мой метод Meteor

updateNote(noteId, note){
    check(noteId, String);
    check(note, NoteUpsertSchema);
    // some code
}

Версии моих пакетов:

// Meteor packages
aldeed:collection2         3.0.0  
audit-argument-checks      1.0.7 
check                      1.3.0* 

// Npm package
"simpl-schema": "^1.5.0"
(I tried with simpl-schema: 1.4.3 same result.)

Как я могу использовать четыре пакета check, audit-argument-checks, simple-schema и collection2 вместе?

Спасибо за ваш ответ

1 Ответ

0 голосов
/ 18 мая 2018

Вы не можете использовать NoteUpsertSchema в утилите check в Метеоре.

check, audit-argument-checks, simpl-schema и collection2 работают очень хорошо в синхронизации, такой проблемы с взаимосовместимостью нет.Check разрешает только определенные параметры, по которым вы можете проверять правильность. Нажмите здесь , чтобы узнать подробности о check разрешенных типах.

Учитывая audit-argument-checks, вам нужно использовать подход, показанный в качестве примера ниже, для проверки аргументов, передаваемых в Meteor Method.Чтобы избежать ошибок при проверке не всех аргументов, когда вы используете SimpleSchema для проверки аргументов метода Meteor, при создании экземпляра SimpleSchema необходимо пройти проверку как параметр.

import SimpleSchema from 'simpl-schema';
import { check } from 'meteor/check';
import { Meteor } from 'meteor/meteor';

SimpleSchema.defineValidationErrorTransform(error => {
  const ddpError = new Meteor.Error(error.message);
  ddpError.error = 'validation-error';
  ddpError.details = error.details;
  return ddpError;
});

const myMethodObjArgSchema = new SimpleSchema({ name: String }, { check });

Meteor.methods({
  myMethod(obj) {
    myMethodObjArgSchema.validate(obj);

    // Now do other method stuff knowing that obj satisfies the schema
  },
});

Убедитесь, что aldeed:simple-schema не указан в спискев .meteor/versions файле.

Также проблема может быть в отправке полного объекта с клиента и проверке только некоторых его полей в метеорном методе.Убедитесь, что параметр, отправляемый в метод, имеет только то, что проверяется, и не имеет дополнительного поля из клиентского кода.

...