hooks

hook技术是用于改变原有业务执行的一种技术,通俗来讲,即是在cdeio平台中,创建、更新、删除(create,update,remove)业务是默认实现的,如果我们需要在三个业务之前,或者之后处理一些别的业务,那么通过 exports.hooks 来暴露其它业务,你可以轻松搞定。

基础

定义如下

exports.hooks = {
    beforeCreate: {
        defaults: function (entity, request, meta) {

            return false;
        }
    },

    beforeUpdate: {
        defaults: function (entity, request, meta){
           ...
        }
    },

    afterRemove: {
        defaults: function (entity, request, meta) {
            ...
        }
    }
};

方法中可写任意逻辑代码,且可以mark services,调用service定义的方法。另外hook分以下几种模式:

  • beforeCreate 创建数据之前执行,可中止创建操作
  • beforeUpdate 更新数据之前执行,可中止更新操作
  • beforeRemove 删除数据之前执行,可中止删除操作
  • afterCreate 创建数据之后执行,不可中止创建操作
  • afterUpdate 更新数据之后执行,不可中止更新操作
  • afterRemove 删除数据之后执行,不可中止删除操作

传入参数:

  • entity 已经填充好数据当前实体对象
  • request 请求对象,里面包含界面请求的参数, 详细请看request 章节。
  • meta 当前实体的反射信息,字段、注解等

注意:
只有before型的hook才能中止操作,如果需要中止,请 return false;

高级

default 表示默认的添加、更新、删除操作,除了 default 外,还可以配置其它方式的操作

场景:以下展示的是一个修改密码的的 hook,因为修改密码是更新操作,因此也会触发 beforeUpdate,不过此处要将 default 改为 changePassword - 表单名称,其它几种hook参照这个。

exports.hooks = {

    beforeUpdate: {
        changePassword: function (entity, request, meta){
           ...
        }
    }
};

exports.fieldGroups = {
    editPwdInfo: [
        {name: 'oldPassword', type: 'password', required: true, validations: {rules: {required: true, rangelength:[6, 60]}, messages: {required: '不能为空', rangelength:'个数必须在6和60之间'}}},
        {name: 'newPassword', type: 'password', required: true, validations: {rules: {required: true, rangelength:[6, 60]}, messages: {required: '不能为空', rangelength:'个数必须在6和60之间'}}},
        {name: 'newPassword2', type: 'password', required: true, validations: {rules: {required: true, equalTo: 'newPassword'}, messages: {required: '不能为空', equalTo: '不匹配'}}}
    ]
};

export.forms = {
    changePassword: {
        groups: ['editPwdInfo']
    }
};