2017-02-10 6 views
2

Я довольно новичок в Meteor. Я пытался найти способ отображения сообщений об ошибках проверки для моего компонента React, но я не имел успеха.Проверка формы с использованием Meteor/React/SimpleSchema

Это employees.js файл, который находится в моем каталоге импорта

import {Mongo} from 'meteor/mongo'; 
import {Meteor} from 'meteor/meteor'; 
import {check, Match} from 'meteor/check' 
import SimpleSchema from 'simpl-schema'; 

export const Employees = new Mongo.Collection('employees'); 

const Schemas = {}; 

Schemas.Employee = new SimpleSchema({ 
    name: { 
    type: String, 
    min: 2, 
    }, 
    email: { 
    type: String, 
    min: 2 
    }, 
    phone: { 
    type: String 
    } 
}); 

Meteor.methods({ 
    'employees.insert': function (employee) { 
    check(employee, Schemas.Employee) 
    } 
}); 

А вот отрезал мой код, который обрабатывает форму. Метод метеор называется штрафом, просто я не могу вернуть объект ошибки, чтобы отображать ошибки.

import React, {Component} from 'react'; 
import {TextField, RaisedButton} from 'material-ui'; 
import {Flex, Box} from 'reflexbox'; 
import injectTapEventPlugin from 'react-tap-event-plugin'; 

injectTapEventPlugin(); 

class EmployeeForm extends Component { 

    ... 

    handleSubmit(event) { 
    event.preventDefault(); 
    this.handleClear(() => { 
     Meteor.call('employees.insert', this.state, (error, response) => { 
     console.log('error', error); 
     }) 
    }) 
    } 

    ... 
} 

export default EmployeeForm; 

Любая помощь мне очень понравилась. Документация о том, как это сделать, тонкая - ну, это было в моих поисках межсетевых экранов.

Благодаря

ответ

1

Я не думаю, что вы могли бы использовать simple schema с check. Обычно для нормальных методов Метеора, я использую этот код для проверки данных:

Meteor.methods({ 
    'employees.insert': function (employee) { 

    try { 
     Schemas.Employee.validate(employee); 
    } catch (e) { 
     throw new Meteor.Error('error', e.message); 
    } 

    // ... 
    } 
}); 

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

+0

Thanks Khang, ваше решение сработало :) –

0

Мое решение основано на ответе Кхана.

Employees.attachSchema(Schemas.Employee); 

Meteor.methods({ 
    'employees.insert': function (employee) { 
     Employees.insert(employee, { removeEmptyStrings: false }, (error, response) => { 
     if (error) { 
      throw new Meteor.Error('error', error.invalidKeys); 
     } 
     }); 
    } 
});