npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

emb-api

v0.1.319

Published

码农村nodejs类库,完成解决回调陷阱,配置框架,IOC框架,统一多DB访问框架,可扩展日志框架和io/db/net/thread/pool 克隆表达式,加解密算法等等一系列基础类库和算法的实现

Downloads

1,835

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(%,值,%)
        (   $参数 值 代表 值
        &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请求进行鉴权,心跳验证,会话创建等工作。