2017-02-10 84 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); 
     } 
     }); 
    } 
});