V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
verncake
V2EX  ›  程序员

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

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

    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   ·   实用小工具   ·   2565 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 03:49 · PVG 11:49 · LAX 19:49 · JFK 22:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.