Meteor js: получить полное сообщение проверки с простой схемой validatedmethod

Я новичок в Meteor js и пытаюсь создать форму, следуя официальному руководству http://guide.meteor.com/methods.html#method-form. Он предлагает использовать пакет mdg:validated-method и aldeed:simple-schema для проверки, которые основаны on mdg:validation-error, чтобы возвращать клиенту сообщения об ошибках проверки. Руководство предлагает этот код для обработки проверки

Invoices.methods.insert.call(data, (err, res) => {
    if (err) {
        if (err.error === 'validation-error') {
            // Initialize error object
            const errors = {
                email: [],
                description: [],
                amount: []
            };

            // Go through validation errors returned from Method
            err.details.forEach((fieldError) => {
                // XXX i18n
                errors[fieldError.name].push(fieldError.type);
            });

            // Update ReactiveDict, errors will show up in the UI
            instance.errors.set(errors);
        }
    }
});

но проблема в том, что в err.error доступны только fieldError.type, fieldError.name и первое удобочитаемое сообщение из простой схемы. Я использую переведенные сообщения и метки полей в простой схеме, чтобы получить понятные сообщения об ошибках проверки. Таким образом, получение только имени свойства объекта с «требуемым» неприемлемо, особенно в случае, когда сообщение включает, например, минимальные/максимальные ограничения. Я не смог найти способ получить контекст проверки простой схемы для получения полного списка читаемых человеком ошибок.

Итак, мой вопрос: могу ли я получить полные сообщения об ошибках на клиенте и как? Или, может быть, есть лучшие способы добиться того, что я пытаюсь сделать?

заранее спасибо


person VV01K    schedule 11.03.2016    source источник
comment
Я также добавил проблему в проект aldeed:simple-schema github.   -  person VV01K    schedule 12.03.2016


Ответы (1)


Привет! Недавно столкнулся с такой же проблемой. Поэтому я просто создаю запрос на вытягивание с некоторым улучшением кода, чтобы решить эту проблему. . Теперь, когда вы отправляете форму и вызываете validated-method со стороны клиента, как показано ниже:

yourMethodName.call(data, (err) => {
 if (err.error === 'validation-error') {
   console.dir(err, 'error ')
  }
});

Вы увидите error object в console:

{
  "errorType": "ClientError",
  "name": "ClientError",
  "details": [
    {
      "name": "firstName",
      "type": "required",
      "message": "First name is required"
    },
    {
      "name": "lastName",
      "type": "required",
      "message": "Last name is required"
    },
    {
      "name": "phone",
      "type": "required",
      "message": "Phone is required"
    },
    {
      "name": "email",
      "type": "required",
      "message": "Email is required"
    }
  ],
  "error": "validation-error"
}

Поэтому я просто копирую это со своей консоли. выход. В моем случае метод следующий:

export const yourMethodName = new ValidatedMethod({
  name: 'my.awesome.method',
  validate: new SimpleSchema({
    firstName: { type: String },
    lastName: { type: String },
    phone: { type: Number },
    email: { type: String, regEx: SimpleSchema.RegEx.Email }
  }).validator({ clean: true }),
  run(doc) {
    YourCollection.insert(doc);
  }
});

Если мой запрос на вытягивание будет принят, вы можете легко использовать node-simple-schema ( это следующая версия meteor-simple-schema). Если это не так, вы можете использовать мою вилку.

Надеюсь это поможет!

EDIT: теперь эта функция доступна в официальном пакете node-simple-schema< /а>.

person Vasyl Semilyak    schedule 24.04.2017