2021 年了,是该了解下 Midway.js 了,我这几行代码给你看看 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
verncake
V2EX    程序员

2021 年了,是该了解下 Midway.js 了,我这几行代码给你看看

  •  
  •   verncake 2021-04-09 19:16:41 +08:00 4630 次点击
    这是一个创建于 1653 天前的主题,其中的信息可能已经有所发展或是发生改变。

    2021 年了,是该了解下 Midway.js 了,我这几行代码给你看看

    FSD Service

    FSD Logo

    FSD (Full Stack Develop) Service - Midway.js 的最佳实践

    codecov GitHub Actions status codebeat badge Codacy Badge GitHub license PRs Welcome

    Sonar Cloud

    拓展阅读:

    项目导览 & TODO

    在这个项目中,你会看到以下基于 Midway 的实践案例 (上层使用 Egg.js )

    我们正在做以下工程实践例子,大家你遇到什么问题,或者希望追加什么功能,或者学习内部实现。 可以关注我们的仓库(点赞,分享...三连)在 issue 留言,我们会征集你的意见,带来最干货的案例。

    帮你扫清学习障碍,让你用起 Midway 来更加得心应手,提升能效,找回编码的乐趣。

    框架特性及能力应用

    • 中间件
    • 依赖注入
    • 参数校验和转换 ( DTO 层)
    • 测试 ( Controller & Service 单元测试)
    • Swagger
    • Database

    功能

    基础

    • Admin 登录
    • 普通用户登录-账户密码
    • OAuth 2.0
    • 日志监控
    • 本地上传文件服务
    • 鉴权中间件
    • 接口响应统计中间件
    • 统一错误处理
    • SnowFlake 雪花算法生成分布式 ID

    超级管理

    • 权限
    • 角色
    • 管理员
    • 菜单
    • 日志(操作日志,记录管理用户的实际操作)

    快速开始

    see Midway docs for more detail.

    Development

    先将 database 目录下到 sql 文件迁移到数据库,修改默认的 config 配置文件(需要 Redis 和 MySQL 服务可以正常访问)

    $ npm i $ npm run dev $ open http://localhost:7001/ 

    Deploy

    $ npm start $ npm stop 

    npm scripts

    • Use npm run lint to check code style.
    • Use npm test to run unit test.

    Redis

    • 使用 Redis 作为用户登录凭证存取的地方
    • RTS 收集统计数据 (开发中)

    Redis 划分

    建议使用 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
    • 在做关系查询的时候,关系表需要手动加软删除判断 IS NULL,如下:
       /** * 根据菜单 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 作用在于把统计的计算异步化,从而不影响正常的业务请求处理

    (消费者的逻辑代码,需要写在单独一个工程,独立部署)

    大致流程如下,手绘的,工具简陋,姑且看一下。 IMG_5365 HEIC

    答疑

    群里会有热心的朋友,也会有新版本发布推送。钉钉扫码加入答疑群

    二群

    一群(已满)

    License

    我们的代码使用 MIT 协议,请放心使用。

    17 条回复    2021-04-12 10:16:55 +08:00
    dream4ever
        1
    dream4ever  
       2021-04-09 22:08:38 +08:00
    看完之后就一个感觉:乱糟糟,没看到重点……
    imzcg2
        2
    imzcg2  
       2021-04-09 22:11:04 +08:00 via Android
    这就是传说中的一个 js 一个前后端全站项目吗
    constructor
        3
    constructor  
       2021-04-09 22:18:20 +08:00
    很棒的框架,加油!
    pigspy
        4
    pigspy  
       2021-04-09 22:39:55 +08:00
    跟 nestjs 有啥区别
    uptonking
        5
    uptonking  
       2021-04-09 22:46:20 +08:00 via iPhone   1
    node 的后端框架我还是选 nestjs,nestjs 贡献者多且生态丰富,midway 除了阿里的人会用其他很少人用了,搞不好哪天没有 kpi 就被丢进垃圾桶了
    blindpirate
        6
    blindpirate  
       2021-04-09 22:51:57 +08:00   1
    WildCat
        7
    WildCat  
       2021-04-09 23:10:44 +08:00 via iPhone
    用叮叮群聊技术
    yamedie
        8
    yamedie  
       2021-04-10 09:16:55 +08:00 via Android
    eggjs 还在更新吗? cnodejs.org 关站快一年了
    verncake
        9
    verncake  
    OP
       2021-04-10 12:26:09 +08:00
    @blindpirate 短期能解决业务功能开发效率问题,但长期的维护成本相当高,也算是提升人效的一种尝试,创业项目快速试错用也还不错,weex 应该暂时停更了。
    verncake
        10
    verncake  
    OP
       2021-04-10 12:27:33 +08:00
    @uptonking Midway.js 真不是 KPI 项目,现有专门的 team 维护,主未来 Serverless 方向
    verncake
        11
    verncake  
    OP
       2021-04-10 12:28:56 +08:00
    @dream4ever 这是个实践项目,框架相关的移步 midwayjs.org
    verncake
        12
    verncake  
    OP
       2021-04-10 12:29:40 +08:00
    @imzcg2 一个 Javascript 开发,打通前后端
    verncake
        13
    verncake  
    OP
       2021-04-10 12:31:00 +08:00
    @yamedie eggjs 核心库基本很稳定,暂时没什么更新
    verncake
        14
    verncake  
    OP
       2021-04-10 12:32:04 +08:00
    该文章对应的项目地址 https://github.com/fsd-nodejs/service-mw2
    ericgui
        15
    ericgui  
       2021-04-11 00:28:13 +08:00
    @WildCat 对,这个最恶心了
    ericgui
        16
    ericgui  
       2021-04-11 00:29:40 +08:00
    @verncake 你们对任何项目都没有一个长期承诺,都是短期某人升职的工具,那些当初被你们忽悠入坑 weex 的不被坑死了么?
    verncake
        17
    verncake  
    OP
       2021-04-12 10:16:55 +08:00
    @ericgui 技术是在不停的发展的,框架也在迭代,现在看来,跨端方案,Flutter 更优秀
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2567 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 12:04 PVG 20:04 LAX 05:04 JFK 08:04
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86