Reactjs 使用Meteor/React/SimpleSchema进行表单验证

Reactjs 使用Meteor/React/SimpleSchema进行表单验证,reactjs,meteor,simple-schema,Reactjs,Meteor,Simple Schema,我对《流星》还是个新手。我一直试图找到一种方法来向我的React组件显示验证错误消息,但没有成功 这是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 Emp

我对《流星》还是个新手。我一直试图找到一种方法来向我的React组件显示验证错误消息,但没有成功

这是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)
  }
});
这是我处理提交的代码片段。meteor方法被称为fine,只是我无法让errors对象返回以显示错误

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;
任何帮助我都将不胜感激。关于如何做到这一点的文档非常少——好吧,这是在我搜索互联网的时候


谢谢

我认为您不能将
简单模式
检查
结合使用。通常对于普通Meteor方法,我使用以下代码验证数据:

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

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

    // ...
  }
});

这样,您将在客户端接收错误消息。我还鼓励您看看,这是定义Meteor方法的另一种方式,它有许多有用的混合,包括使用简单模式混合进行验证。

我的解决方案非常基于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);
        }
      });
  }
});