emb-api
v0.1.319
Published
码农村nodejs类库,完成解决回调陷阱,配置框架,IOC框架,统一多DB访问框架,可扩展日志框架和io/db/net/thread/pool 克隆表达式,加解密算法等等一系列基础类库和算法的实现
Downloads
980
Readme
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(%,值,%)
( $参数 值 代表 值
&& &&:[{},{}] 值为JSON格式或者JSON数组格式 递归如上规则完成 ( and )操作 且 数组内为and
|| ||:[{},{}] 值为JSON格式或者JSON数组格式 递归如上规则完成 ( or )操作 且 数组内为or
+ [{},{}] 用在表+ >+ <+ ,格式转换为 on 格式 在 + 的对象数组中分别对应表的第一次连接,第二次连接,以此类推
表名 可以使用(+ 表示为 inner join >+表示left join <+表示 right join ,表示为, | 表示为 union & 表示为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请求进行鉴权,心跳验证,会话创建等工作。