2021 年了,是该了解下 Midway.js 了,我这几行代码给你看看
FSD (Full Stack Develop) Service - Midway.js 的最佳实践
拓展阅读:
在这个项目中,你会看到以下基于 Midway 的实践案例 (上层使用 Egg.js )
我们正在做以下工程实践例子,大家你遇到什么问题,或者希望追加什么功能,或者学习内部实现。 可以关注我们的仓库(点赞,分享...三连)在 issue 留言,我们会征集你的意见,带来最干货的案例。
帮你扫清学习障碍,让你用起 Midway 来更加得心应手,提升能效,找回编码的乐趣。
基础
超级管理
see Midway docs for more detail.
先将 database 目录下到 sql 文件迁移到数据库,修改默认的 config 配置文件(需要 Redis 和 MySQL 服务可以正常访问)
$ 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
/**
* 根据菜单 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 作用在于把统计的计算异步化,从而不影响正常的业务请求处理
(消费者的逻辑代码,需要写在单独一个工程,独立部署)
大致流程如下,手绘的,工具简陋,姑且看一下。
群里会有热心的朋友,也会有新版本发布推送。钉钉扫码加入答疑群
二群
一群(已满)
我们的代码使用 MIT 协议,请放心使用。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.