Skip to content

void-soul/egg-bag

Repository files navigation

介绍

这是一个基于egg.js自定义框架的类库,主要集成了小型公司、个人开发常用的外部 lib、方法。目前在不断维护中.

package.json

  "dependencies": {
    "egg-bag": "1.44.53",
  },
  "egg": {
    "typescript": true,
    "framework": "egg-bag",
    "declarations": false
  }

更新记录

1.7.0

  1. 发送验证码短信时,模板 id 由参数传入
  2. paasService 增加发送短信的方法
  3. SetEx、BaseService 参数验证机制升级

1.7.1

  1. 修正 LambdaQuery、LambdaQueryMongo 的验证代码
  2. LambdaQuery 增加查询单条记录
  3. BaseService 的 unique 查询系列方法增加自定义错误提示的功能

1.7.2

  1. 将 baseService 里的查询方法更语义化 如:

    querySingelColumnBySql querySingelRowSingelColumnBySql
    querySingelColumnBySqlId querySingelRowSingelColumnBySqlId

1.7.3

  1. 通用 query 语句内置变量支持多级取值,如workRole.comtype

1.7.4

  1. sql 标签中 betweenTag 改 between

1.8.8

  1. 发送 socket 消息时,通道错误的问题

1.9.0

  1. 增加 alinode 插件

1.10.7

  1. 支持 nuxt 注解渲染

服务器返回数据时,热重启可能会丢失数据,刷新即可

1.14.3

  1. 如果不指定调度任务的执行锁,那么执行锁默认使用调度任务的文件名
  2. 调度任务执行锁支持放在 redisother
  3. BaseServiceupdataBatchwhere 可包含 data key
  4. BaseServicepageQuery 设置 limitSelf = true 查询时,也会返回页码了
  5. BaseServiceLambdaQuery增加方法updateColumn,可更新指定列
  6. SetEx增加reset方法,可选择性重置 set 对象
  7. BaseService,BaseMongoService增加一套方法Loose,如insertTemplateLoose仅会忽略null\undefinded,空字符串还是会插入的
  8. app下支持sql-fn目录,放入.mu文件后,可以在任意 sql 中使用,例如 {{>limit}}

1.14.4

  1. 调度任务执行锁优先使用this.key

1.14.7

  1. 升级依赖

1.15.0

  1. 将 redis 改为非必须配置,但仅限于开发模式

1.16.0

  1. 增加 config.cacheIO、config.sessiong.devidIO,表示缓存、devid 存放地址

1.17.0

  1. now.json 支持 按分、小时、天、周、月、年加减时间,并支持时间格式化, 默认 YYYY-MM-DD HH:mm:ss
  2. today.json 支持 按分、小时、天、周、月、年加减时间,并支持时间格式化, 默认 YYYY-MM-DD

1.17.1

  1. app 增加扩展方法:dataConfig, 类似于前端的 filter

1.17.5

  1. 增加小程序服务端支持

1.18.0

  1. 增加路由请求防重复提交锁

1.19.0

  1. 支持同时配置多个小程序
  2. 增加企业微信支持
  3. 修复小程序 token 很快就过期的问题

1.20.0

  1. 优化了多小程序、多企业微信应用的配置

1.20.2

  1. 企业微信发送消息 bug 修复
  2. 增加微信小程序解密函数
  3. 增加通用 MD5 加密函数

1.22.0

  1. 项目启动时,读取 app/sub-syncapp/sub-async 目录,订阅异步、同步消息.目录中文件名就是订阅的消息名称,每个文件导出格式:
import {Context} from 'egg-bag';
export default function(this: Context){
  this.service.xxx;
}

异步消息发送:

app.emitSyncRandom(event, ...args): 随机找一个线程发送 app.emitSyncAll(event, ...args): 发送给所有线程 app.emit(event, ...args): 发送给本线程

同步消息发送:

app 中发送时,this 指向的 context 是一个虚拟的上下文,不包含用户会话。如果有需要用户信息,则需要自行 login

ctx 中发送时,this 指向的 context 会沿用当前上下文

app.emitASync(event, ...data)

ctx.emitASync(event, ...data)

1.23.0

增加微信支付

调用方式:

app.getWxPay().xxx

  1. 回调代码自动加锁
  2. 所有金额不需要单位为分,按元即可

支付回调代码写在:sub-async/${ appCode }-pay-hook.ts 参数: WxPayHook, 下单时传入的 dataCache 例:

import {Context, WxPayHook} from 'egg-bag';
import {MdOrderAdd} from '../enhance/MdOrderEnhance';
export default function (this: Context, order: WxPayHook, cache: MdOrderAdd) {
  this.logger.error(order, cache);
}

退款回调代码写在:sub-async/${ appCode }-ref-hook.ts 参数: WxRefHook

例:

import {Context, WxRefHook} from 'egg-bag';
export default function (this: Context, order: WxRefHook) {
  this.logger.error(order);
}

1.23.16

  1. 修复一处打印日志错误

1.24.0

  1. 优化登入时只允许登录一次的处理
  2. 可以通过配置 socket 中的回调dickUser来决定新登录用户是否提掉原有用户
  3. 增加默认 socket.emit 的路由 /login /logout,用于登入、登出 socket 房间

1.25.0

  1. 增加 BaseContent 的方法缓存
  2. 增加一些注释

1.26.0

增加方法缓存注解,适用于 context 类(controller、service、ctx)的 public、private 方法。有 3 个参数:

key : 方法,结果返回值作为缓存 key,参数同方法的参数。可以用来清空缓存 clearKey : 方法,结果返回值作为缓存清除 key,参数同方法的参数。可以用来批量清空缓存 autoClearTime: 自动清空缓存的时间,单位分钟

举例:

  @ContextMethodCache({
    key: (pdid: number) => `pd-detail-${ pdid }`,
    clearKey: (pdid: number) => [`pd-${ pdid }`]
  })
  async test(pdid: number){

  }

1.28.0

增加脚本 sql 库

读取目录 sql-script,例如

msOrder.ts

export function selectList(this:Context, param1, param2){
  return `select * from ...`;
}

使用方式和 mu 是一样的

1.30.0

增加导出 interface: DbConnection,以后:

this.transction(async conn => {
  ...
  // conn 类型是 DbConnection,不再是any了
});

1.31.0

app/sql-script目录中格式如下:

mdOrder.ts

import {SqlScript, Context} from 'egg-bag';

// 直接返回sql语句,用于查询 mysql
export const queryList: SqlScript = function () {
  return 'SELECT * FROM md_order';
};

// 直接返回sql语句,用于查询 mysql
export const queryList: SqlScript = function (this: Context, param: {[k:string]:any}) {
  // 依然支持两种参数,1:直接拼接,2::参数名
  return `SELECT * FROM md_order WHERE userid = '${this.me.userid}' AND id = '${param.id}' AND time < :time`;
};

// 直接返回mongoFilter对象,用于查询 mongo
export const queryList: SqlScript = function<MdOrder> (this: Context) {
  return {
      query: {[P in keyof T]?: L[P] | FilterQuery<T>};
      options: {
        limit?: number;
        skip?: number;
        sort?: {[P in keyof T]: 1 | -1};
        projection?: {[P in keyof T]: 1};
      };
      tableName: string;
  }
};

1.32.0

支持 ts 的路径别名了

tsconfig.json

{
  "compilerOptions": {
    "paths": {
      "app/*": ["app/*"]
    }
  }
}

在项目中:

import initDataFlow from "app/flow-help/init-data-flow";

1.33.0

  1. 方法缓存的 key 生成方法中,除了方法的原有参数外,还会追加当前 用户对象
  2. 方法缓存支持随当前用户 session 释放
  3. 增加this.app.subSyncthis.app.subASync,可以动态订阅 异步、同步事件.
  4. 可通过配置redis.clientssub以及redis.conf: notify-keyspace-events "Ex",实现订阅过期 key 释放事件:this.app.subSync(user|other-key)
  5. socket断开时,不再重新登入 socket监听缓存的用户session了,最明显的体验为:手动清空redissession,客户端重新请求,发现会话过期,断开socket时,redis中不会再次出现刚才清掉的session
  6. 当用户session过期时,会利用订阅机制 清空当时缓存 的 userid-devid的映射关系.前提是:登录前 devid 不是自己赋值,而是由 bag 赋值
  7. 修复原 同步消息 通过 context 无法发出的 bug
  8. 增加this.ctx.loginByDevid方法,临时登录一个用户 session,且不缓存
  9. 增加this.ctx.emitASyncWithDevidthis.app.emitASyncWithDevid,发布同步消息时,可以附带用户 token,这样在消费消息时,可以获取this.ctx.me
  10. 支付、退款增加一个参数,传入当前操作的devid,以便在处理回调时可以直接获取this.ctx.me

1.33.4

  1. 修复mongodbupdate错误
  2. 增加base-service的 debug 日志输出
  3. 修复打包nuxt配置时,因 ts 别名导致找不到用户自定义配置的问题
  4. 增加app.emitASyncWithDevid,可携带用户 token 进行发送异步消息,此时所有异步消息执行上下文会自动携带用户信息

1.33.5

  1. 方法缓存的 key、clearKey 方法都必须定义为箭头函数,不会再传入 this(为了提高效率)

1.35.0

  1. service 增加 clear 方法
  2. 增加工作流支持:测试

1.36.0

  1. 增加流程分流节点
  2. 增加流程设计工具: yarn bag flow [port] 会启动一个简易 http 服务,默认端口 4000.

1.37.0

  1. 增加 excel 导出

1.37.5

  1. 增加数据库的 incr、decr、incrBy、decrBy 方法

1.37.16

  1. 增加 insertOrUpdate 方法

1.37.18

  1. 编译时支持指定其他 tsconfig.json 文件

1.38.0

  1. pageQuery 支持自定义条数 sql 语句
  2. 增加附件名称注解

1.44.50

  1. mongodb 增加了删除属性的方法
  2. 增加了服务端渲染时,可以通过代码配置渲染模板、错误页面的功能
  3. mysql 的 Lamdba 增加了全文搜索、缓存、正则支持

1.45.0

  1. app增加 transctionMysql、excuteWithLock、excuteWithCache
  2. ctx增加 excuteWithCache
  3. 增加 ContextMethodLock 注释

1.46.0

  1. 修复 ContextMethodLock 存在的 bug
  2. 支持 ContextMethodLock 和 ContextMethodCache 同时使用
  3. 升级依赖