IT审计与灾备 4月24日 星期三 20:00 云祺视频号准时直播
vinchin linked
delta 扫码预约直播,观看精彩内容!
closed
logo
关于我们

技术分享

技术分享 代码备份方法

代码备份方法

2019-09-03

代码并不完整

校验功能代码:

const async = require('async');


const validatorsHelpers = {
    required(defData) {
        defData = defData || {};
        function returnFunc(data, cb) {

            if (data.fieldValue) {
                cb(null, data);
                return;
            }
            cb(defData.msg || data.fieldName + " field is required", data);
        }
        return returnFunc;
    },
    regex(defData) {
        defData = defData || {};
        function returnFunc(data, cb) {

            if (defData.regex.test(data.fieldValue)) {
                cb(null, data);
                return;
            }
            cb(defData.msg || data.fieldName + " field is invalid", data);
        }
        return returnFunc;
    },
    phone(defData) {
        defData = defData || {};
        defData.regex = /(^(13\d|14[57]|15[^4,\D]|17[678]|18\d)\d{8}|170[059]\d{7})$/;
        defData.msg = defData.msg || "请输入有效的手机号";
        return validatorsHelpers.regex(defData);
    }
};

function validateRun(validators, data) {
    var tasks = [];

    function wapper(validator) {
        return function(done) {
            validator(data, done);
        }
    }

    for (var task of validators) {
        tasks.push(wapper(task));
    }

    return function(cb) {
        async.series(tasks, function(err) {
            data['error'] = err;
            cb(null, data);
        });
    }
}

function validate(data, fields, cb) {
    var tasks = [];
    for (var fieldName of Object.keys(fields)) {
        var validatorsObj = fields[fieldName];
        var fieldValue = data[fieldName];
        var validators = [];

        if (validatorsObj !== null && Object.prototype.toString.call(validatorsObj) !== '[object Array]') {
            validators = [validatorsObj];
        } else {
            validators = validatorsObj;
        }
        if (!validators) {
            validators = [];
        }

        tasks.push(validateRun(validators, {'fieldName': fieldName, 'fieldValue': fieldValue}))
    }
    async.parallel(tasks, function (err, results) {
        var errors = {}, rData = {};
        for (var rs of results) {
            if (rs.error) {
                errors[rs.fieldName] = rs.error;
            } else {
                rData[rs.fieldName] = rs.fieldValue;
            }
        }
        cb(errors, rData);
    });
}

const Mixin = {

    validateAll(cb) {
        var data = this.state.data, fields = this.state.fileds;
        validate(data, fields, (errors, rData) => {
            this.setState({
                errors: errors
            });
            cb && cb(Object.keys(errors).length == 0, rData);
        });
    },
    validateOne(name, cb) {
        var data = this.state.data, fields = this.state.fields, allerrors = this.state.errors;
        var d = {}, f = {};
        d[name] = data[name];
        f[name] = fields[name];
        validate(d, f, (errors, rData) => {
            allerrors[name] = errors[name];
            console.info(errors, allerrors);
            this.setState({
                errors: allerrors
            });
            cb && cb(Object.keys(errors).length == 0, rData);
        });
    },
    handleChangeValidate(event) {
        var name = event.target.name;
        this.state.data[name] = event.target.value;
        this.setState({
            data: this.state.data
        });
        this.validateOne(name);
    }
};

module.exports = exports = {
    validate: validate,
    helper: validatorsHelpers,
    Mixin: Mixin
};

调用样例:(代码不全)

const Validateor = require('./common/validator');


const SomeForm = React.createClass({
    mixins: [Validateor.Mixin],

    getInitialState: function() {
        return {
            errors: {},
            data: {
                phone: ''
            },
            fields: {
                phone: [
                    Validateor.helper.required({errorMsg: "请输入手机"}),
                    Validateor.helper.phone(),
                    phoneExist // 其他自定义校验
                ]
            },
            phoneLoading: false
        };
    },

    onSubmit: function(e) {
        console.info("开始校验。。。。");
        this.validateAll().then(function() {
            console.info("校验结束。。。。");
            this.sendForm();
        }.bind(this));
    },

    render: function() {
        return (
            <div className="container">
                <form className="form-signin">

                    <PhoneInput
                        onChange={this.handleChangeValidate}
                        value={this.state.data.phone}
                        error={this.state.errors.phone}
                        />
                        onClick={this.onSubmit}>提交</Button>
                </form>

            </div>
        );
    }
});
                   
云祺备份软件,云祺容灾备份系统,虚拟机备份,数据库备份,文件备份,实时备份,勒索软件,美国,图书馆
  • 标签:
  • 其他

您可能感兴趣的新闻 换一批

现在下载,可享30天免费试用

立即下载