2017-02-10 39 views
2

我对Meteor相当陌生。我一直在试图找到一种方法来向我的React组件显示验证错误消息,但我没有成功。使用Meteor/React/SimpleSchema进行表单验证

这是驻留在我的进口商品目录

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) 
    } 
}); 

这里是我的代码处理提交文档片断employees.js文件。 meteor方法被称为罚款,只是我不能获取错误对象来显示错误。

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 schemacheck。通常对于普通的Meteor方法,我使用以下代码来验证数据:

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

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

    // ... 
    } 
}); 

这样您将在客户端收到错误消息。我还鼓励你看看validated-method,这是定义Meteor方法的另一种方法,它有许多有用的mixin,包括简单模式mixin的验证。

+0

谢谢Khang,您的解决方案工作:) –

0

我的解决方案非常基于Khang的答案。

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); 
     } 
     }); 
    } 
});