Nautical Pirate Moustache

    emb-api

    0.1.295 • Public • Published

    gcl

    目录

    Install

    $ npm install emb-api

    码农村 nodejs emb扩展类库

    Introduction

    emb-api为emb下为其它vesh项目接入emb系统开发的API工具,涉及 EMBDataFactory EMBModule > EMBAutoFactoryDecorator > EMBMySQLConverter > EMBMsSQLConverter(todo) > EMBNoSQLConverter(todo) EMBEventModuler

    config

        index.npcf
        "AppSettings": {
            "embconnect": {
                "host": "https://emb.cv.com",//emb系统域名
                "method": "POST",
                "timeout ": 60000,
                "SystemID":"90e1373f162011e8b40400505635a088",
                "TokenURL":"/api/createToken.single",
                "DoURL":"/api/do.single",
                "expireTime":7
            },
        },
        "Middler": {
            "VESH.view": {
                "com.coooders.Project.VESH.HttpModulers": {
                    "mode": "static",
                    "params": [
                        ...
                        {
                            /*
                            识别_token参数完成对emb调用_token参数的会话重置,保证emb系统反向调用成功
                            识别_m参数协助EMBAutoFactoryDocator完成 URL=>MySQL,MsSQL,NoSQL功能转换。
                            要求URL必须按照[库|~]/[表|*][/[字段|索引|*]]/[操作|*]定义,并强制要求在Ni文件夹下的npcf配置文件中按照如下格式和顺序进行命令搜索,如无权限限制则不允许调用_m命令
                            * 表结构级别
                            *      库.表.类型.操作
                            *      库.表.类型.*
                            *      库.表.*.操作
                            *      库.*.类型.操作
                            *      库.*.*.操作
                            *      库.*.*.*
                            * 表数据级别
                            *      库.表.操作
                            *      库.表.edit
                            *      库.*.edit
                            *      库.表.nodel
                            *      库.*.nodel
                            *      库.*.操作
                            *      库.表.*
                            *      库.*.*
                            * 库级别
                            *      库.操作
                            *      库.*
                            *      *.操作
                            * 其中库 可以是 ~:当前连接库 或者 库 :Ni中定义许可的命令
                            然后将参数由_m改为_n触发NiModuler调用。
                            */
                            "type": "EMBModuler",
                            "path": "emb-api",
                            "params": [{"ref":"EMB/com.coooders.project.emb.crypt"},{"middler":true},"Ni"]
                        },
                        {
                            "type": "NiModuler",
                            "path": "~V/Control/core-modulers",
                            "params": [
                                [{
                                        "type": "FormFilter"
                                    },
                                    {
                                        "type": "SessionFilter",
                                        "params": [".User;.PIDS;.EIDS"]
                                    }
                                ], {
                                    "middler": true
                                }, "Ni"
                            ]
                        },{
                            //识别_e参数并将执行结果merge参数(一般是dbresult的single()结果merge输入参数后按照_e的methodID进行处理。
                            "type": "EMBEventModuler",
                            "path": "emb-api",
                            "params": ["emb"] //emb模板
                        },
                        ...
                    ]
            },
            "EMB": {
                "constructorparalength": false,
                "size": 50,
                "app": "33",
                "method": "constructor",
                "mode": "static",
                "path": "emb-api",
                "com.coooders.project.emb.crypt":{"type": "des3xcrypt", "path": "gcl/com/coooders/module/des3xcrypt", "params": ["**********", "******"]},//内部会话保持使用
    
                "com.coooders.project.emb.crypt2":{"type": "des3xcrypt", "path": "gcl/com/coooders/module/des3xcrypt", "params": ["**********", "******"]}//外部鉴权使用
            },
            "Ni": {
                "embfactory":{
                    "type":"EMBDataFactory",//用于调用EMB系统
                    "path":"emb-api",
                    "params":[{ref:"EMB/com.coooders.project.emb.crypt2"}]
                },
                "embautofactory":{
                    "type":"EMBAutoFactoryDecorator",
                    "path":"emb-api",
                    "params":[
                        {ref:"Ni/mysqlfactory"},//装饰的mysqlfactory
                        {type:"EMBMySQLConverter"}//使用mysql url=>sql翻译器
                    ]
                },
                //此时可在Ni框架中调用名为emb的数据模板,根据method参数通过emb系统调用其它系统的服务,命令,事件
                "emb": {
                    "type": "NiTemplate",
                    "mode": "instance",
                    "params": [{
                        "type": "NiStaticDataResource",
                        "params": [{ "ref": "embfactory" }, { "appsetting": "embconnect" }]
                    }, { "ref": "cm" }]
                },
                //此时可以在Ni框架中或者通过_m调用w_emb或者通过action内部调用w_emb方式来使用命令行和参数搭配自动生成MySQL了。
                "w_emb":{
                    "type": "NiTemplate",
                    "mode": "instance",
                    "params": [{
                        "type": "NiInstanceDataResource",
                        "params": [{ "ref": "embautofactory" }, { "appsetting": "w_wx_connect" }]
                    }, { "ref": "cm" }]
                },
            }
        emb.npcf
        "Module.admin.removeBinding":{
            "params": {
                "method": { "type": "VarChar","value":"aeae3ca17df811e8b09b000c29187cb0" },//触发的服务、命令、事件
                "ids": { "type": "VarChar" },//参数
                "URL": { "type": "VarChar","value":"http://ec.cv.com/api/do.void" }//参数
            }, "template": "emb" },
        "cv_wx.*.*.nodel": {
            "params": {
            "_TestPermission":{"type":"VarChar","value":"WX.数据管理.编辑"} //重点是命令“cv_wx.*.*.nodel” 对应的权限 "WX.数据管理.编辑" 和template "w_emb"
        }, "template": "w_emb" },
        "~.*.*.nodel": {
            "params": {
            "_TestPermission":{"type":"VarChar","value":"WX.数据管理.编辑"} //重点是命令“~.*.*.nodel” 对应的权限 "WX.数据管理.编辑" 和template "w_emb"
        }, "template": "w_emb" },

    EMBModule+EMBAutoFactoryDecorator+EMBMySQLConverter 库.表.类型.操作 URL和命令对应的SQL关系定义

    库.表.类型.操作 是对表结构进行操作的处理 其在_m方式调用时需要搜索4级操作的命令定义以确认权限,如果是代码方式调用则不需要

    • 库 使用 库名或者~表示当前库
    • 表 使用 为要操作的表名
    • 类型 使用 column 或者 index
    • 操作 使用 add/drop
    • 当其通过_m方式调用时会按照如下顺序在Ni文件夹内文件寻找命令 并根据命令定义验证 权限和template数据模板
    • 库.表.类型.操作
    • 库.表.类型.*
    • 库.表.*.操作
    • 库.*.类型.操作
    • 库...操作
    • 库...* 其URL和命令对应关系是
        '/库/表/类型/操作.json/tjson/jsonp/tjsonp?_m=MT' => ..类型.操作 => SQL => json/tjson/jsonp/tjsonp
        当操作为add 类型为 column时 post的参数 需要是 字段名:字段类型 譬如 ID:VarChar(32),Name:NVarchar(255)。将分别建立字段
        当操作为add 类型为 Index时 post的参数 需要是字段名:ASC|DESC 譬如 ID:ASC,Name:Desc.将根据2个字段建一个联合索引,同时支持参数中有_unique:*出现 说明该索引为唯一索引。
        当操作为drop 类型为 column时 post的参数 需要是 字段名:* 譬如 ID:'',Name:123。将分别删除字段
        当操作为drop 类型为 Index时 post的参数 需要是字段名:* 譬如 ID:'',Name:123.将根据2个字段删除一个联合索引
        当操作为change 类型为 column时 post的参数 需要是 字段名:字段类型 譬如 ID:VarChar(32),Name:NVarchar(255)。将分别修改字段
        当操作为change 类型为 Index时 post的参数 需要是字段名:ASC|DESC 譬如 ID:ASC,Name:Desc.将根据2个字段重建一个联合索引,同时支持参数中有_unique:*出现 说明该索引为唯一索引。
        

    库.表.操作 是对表及其数据进行操作的处理 其在_m方式调用时需要搜索3级操作的命令定义以确认权限,如果是代码方式调用则不需要

    库      使用 库名或者~表示当前库 
    表      使用 为要操作的表名
    操作    使用 create/drop/truncate/add/update/select/del/count/sum
    当其通过_m方式调用时会按照如下顺序在Ni文件夹内文件寻找命令 并根据命令定义验证 权限和template数据模板
      库.表.操作
      库.表.edit
      库.*.edit
      库.表.nodel
      库.*.nodel
      库.*.操作
      库.表.*
      库.*.*
    其URL和命令对应关系是
    
        '/库/表/操作.json/tjson/jsonp/tjsonp?_m=MT' => ..操作 => SQL => json/tjson/jsonp/tjsonp
        因为删除数据的极端严肃性 所以设计 .[|*].* 操作不包括 drop/del/truncate等操作的授权。所以权限组如下
        .[|*].* => create/add/update/select/count/sum
        .[|*].nodel => create/add/update
        .[|*].edit => create/add/update/drop/truncate/del
        .[|*].[create|drop|truncate|add|update|select|del|count|sum] => create|drop|truncate|add|update|select|del|count|sum
        当操作为create时 post的参数 需要是
            字段名:字段类型 譬如 ID:VarChar(32),Name:NVarchar(255)。将分别对应建立字段。
            _ID:字段名[+字段名] 譬如ID[,+]Name进行主键创建
            _Index:字段名+字段名,字段名+字段名 譬如ID,ID+Name进行索引创建
        当操作为drop时 不需要post参数 将根据表名删除表
        当操作为add时 post参数 按照字段名:值的方式进行创建,不填写字段名则将填写默认值。其中值允许为系统参数。
        当操作为update时 post参数 按照字段名:值的方式进行设置,按照$[?]字段名:值的方式进行条件设置,其中值允许为系统参数或者计算符。也允许为_increase/_decrease,但是当值为 单双引号开头时 按照字符串处理。否则如果值中含有 (+-*/``号时都按照公式方式处理
        当操作为del时 post参数 按照$[?]字段名:值的方式进行条件设置,其中值允许为系统参数或者计算符。
        当操作为select时 post参数 
            按照字段名:* 的方式进行查询字段设置 如果没有就显示*
            按照字段名:[?参数名] 的方式进行查询字段设置 如果没有就显示*
            按照$[?]字段名:值的方式进行条件设置,其中值允许为系统参数或者计算符。
            按照_order:字段名 asc,字段名 desc方式进行设置,其中值允许为系统参数 其与_group互斥
            按照_group:字段名,字段名 进行设置。其中值允许为系统参数 其与_order互斥
            按照_page:数字[,数字] 方式进行设置。其中值允许为系统参数
            按照_distinct:非0 方式进行设置。
            按照_count:非0 方式进行设置。将在结果返回全部符合条件的总数
            按照_columns:a,b 方式进行设置。将在结果集中按照a:true,b:true方式进行显示
    
        当操作为sum时 post参数 
            按照字段名:* 的方式进行查询字段设置 如果没有就显示*,只允许有1个.
            按照$[?]字段名:值的方式进行条件设置,其中值允许为系统参数或者计算符。
            按照_order:字段名 asc,字段名 desc方式进行设置,其中值允许为系统参数 其与_group互斥
            按照_group:字段名,字段名 进行设置。其中值允许为系统参数 其与_order互斥
            按照_page:数字[,数字] 方式进行设置。其中值允许为系统参数
            按照_distinct:非0 方式进行设置。
    
        当操作为count时 post参数 
            按照字段名:* 的方式进行查询字段设置 如果没有就显示*,只允许有1个.
            按照$[?]字段名:值的方式进行条件设置,其中值允许为系统参数或者计算符。
            按照_order:字段名 asc,字段名 desc方式进行设置,其中值允许为系统参数 其与_group互斥
            按照_group:字段名,字段名 进行设置。其中值允许为系统参数 其与_order互斥
            按照_page:数字[,数字] 方式进行设置。其中值允许为系统参数
            按照_distinct:非0 方式进行设置。
        
        值可以使用的系统参数有 
            ?_GUID 自动生成的GUID,
            ?_User_UID 会话用户ID,
            ?_User_OrgID 会话企业ID,
            ?_User_* User会话的其它属性
            ?_EIDS_Values 当前会话的角色串
            ?_PIDS_Values 当前会话的权限串
            ?传入值
            系统函数
        值可以使用的计算符号有,其中参数可以为?开头的系统参数;值可以为 ?开头的系统参数也可以为真实值
            <   $参数<
            >   $参数>
            <=  $参数<=
            >=  $参数>=
            =   $参数=
            !=  $参数!=
            @   $参数 between 值1 and 值2 (值按照|号分割值1 值2)
            !@  $参数 not between 值1 and 值2 (值按照|号分割值1 值2)
            ~=  $参数~=   代表  in ()
            !~=  $参数!~= 代表  not in ()
            @=  $参数@=   代表 find_in_set(,)>0
            !@=  $参数!@= 代表 not find_in_set(,)>0
            %=  $参数%=   代表  like concat(%,,%)
            !%=  $参数!%= 代表  not like concat(%,,%)
            (   $参数  代表 
            &amp;&amp;  &amp;&amp;:[{},{}]  值为JSON格式或者JSON数组格式 递归如上规则完成 ( and )操作  数组内为and
            ||  ||:[{},{}]   值为JSON格式或者JSON数组格式 递归如上规则完成 ( or )操作  数组内为or
            +  [{},{}] 用在表+ >+ <+ ,格式转换为 on 格式  + 的对象数组中分别对应表的第一次连接,第二次连接,以此类推
        表名 可以使用(+ 表示为 inner join >+表示left join <+表示 right join ,表示为, | 表示为 union &amp; 表示为union All)进行表连接操作,且按照表名顺序自动设置缩写为a,b,c,e……z,目前仅支持select,update,del,sum,count使用。
            且后续$条件或者+中必须自动带有a,b,c,d等缩写。
            del必须说明删除的表,例如a:true。
            update必须使用,分隔多个表。
            npcf文件中需要单独设置多表联合对应的Command 判断固定参数和权限

    库.操作 是对库进行操作的处理 其在_m方式调用时需要搜索2级操作的命令定义以确认权限,如果是代码方式调用则不需要

    库      使用 库名或者~表示当前库 
    操作    使用 add/drop
    当其通过_m方式调用时会按照如下顺序在Ni文件夹内文件寻找命令 并根据命令定义验证 权限和template数据模板
        库.操作
        库.*
        *.操作
    其URL和命令对应关系是
    
        '/库/操作.json/tjson/jsonp/tjsonp?_m=MT' => .操作 => SQL => json/tjson/jsonp/tjsonp
        当操作为add时 post的参数 都不需要将根据库名建一个数据库 默认UTF-8
        当操作为drop时 post的参数 都不需要将根据库名删除一个数据库

    Todo

    • EMBNoSQLConverter(todo)
    • EMBAction(todo) 用于接受EMB请求进行鉴权,心跳验证,会话创建等工作。

    Keywords

    Install

    npm i emb-api

    DownloadsWeekly Downloads

    31

    Version

    0.1.295

    License

    ISC

    Unpacked Size

    1.15 MB

    Total Files

    38

    Last publish

    Collaborators

    • panx
    • baibing0004