如果该项目对你有用,欢迎 star 👏 Midway 2.x 样板工程
拓展阅读:
在这个项目中,你会看到以下基于 midway 的实践案例 (上层使用 eggjs )
我们正在做以下工程例子,如果你有新的想法,可在 issue 留言,我们会征集你的意见,带来最干货的案例。
帮你扫清学习障碍,让你用起 midway 来更加得心应手,提升能效,找回编码的乐趣。
基础
超级管理
see midway docs for more detail.
先将 database 目录下到 sql 文件迁移到数据库,修改默认的 config 配置文件
$ npm i
$ npm run dev
$ open http://localhost:7001/
$ npm start
$ npm stop
npm run lint
to check code style.npm test
to run unit test.建议使用 Redis 的时候,对所有 key 做好命名空间划分,便于管理。可把 scope 写到对照表中。
借助 jwt 插件做签名校验,管理员的 token 中会包含 id 字段。
所有 admin 相关的缓存数据都放在 admin:xxxx
下面。
admin:accessToken:${id}
缓存管理员 Token 信息admin:userinfo:${id}
缓存管理员基本信息所有实体表均有 deleted_at 字段 (目前基础模块不使用软删除),用于软删除。
如果要关闭软删除,将 deletedAt 字段注释即可
进行软删除的时候,关系表的数据不做改动。
后期根据需要,用脚本定期清理软删除的数据。
以下模块未使用软删除:
业务软删除单独写一个 BaseModel,其他实体继承该 Model 即可
BaseModel
的实体会自带软删除判断,例子查看src/app/model/base.ts
typescript
/**
* 根据菜单id获取数据
* @param id 菜单id
*/
async getAdminMenuById(id: string) {
const row = await this.adminMenuModel
.createQueryBuilder()
.select()
.leftJoinAndSelect(
'AdminMenuModel.roles',
'role',
'role.deletedAt IS NULL'
)
.where({ id: id })
.getOne();
return row;
}
做接口响应数据统计的出发点,有两点(即使有类似的第三方包,但还是自己实现以下):
虽然框架本身已经有日志功能,但是很多场景下,我们可能需要看下各个接口服务的响应状态
是在正常服务,还是已经出现问题。在有监控的帮助下,可以快速帮我们定位日志排查问题。
是对应统计实时数据而言,这里我们会使用 RTS 的技术方案,会用到 RabbitMQ 和 Redis
RabbitMQ 作用在于把统计的计算异步化,从而不影响正常的业务请求处理
(消费者的逻辑代码,需要写在单独一个工程,独立部署)
大致流程如下,手绘的,工具简陋,姑且看一下。
auth.ts
admin/menu.ts
admin/permission.ts
admin/role.ts
admin/user.ts