# cool-admin-midway-7.x-server **Repository Path**: zh_earth/cool-admin-midway-7.x-server ## Basic Information - **Project Name**: cool-admin-midway-7.x-server - **Description**: node大项目:midwayjs + typeorm + mysql+...cool项目 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-05-13 - **Last Updated**: 2024-06-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: Node, midway, midwayjs, MySQL, type ## README
cool-admin(midway版)一个很酷的后台权限管理系统,开源免费,模块化、插件化、极速开发CRUD,方便快速构建迭代后台管理系统,支持serverless、docker、普通服务器等多种方式部署 到 官网 进一步了解。
## 技术栈 - 后端:**`node.js` `midway.js` `koa.js` `typescript`** - 前端:**`vue.js` `element-plus` `jsx` `pinia` `vue-router`** - 数据库:**`mysql` `postgresql` `sqlite`** ## 技术选型 - midwayjs,基础框架;[midwayjs](https://www.midwayjs.org/docs/intro) - bullmq,基于 redis 的任务与队列框架;[bullmq](https://github.com/OptimalBits/bull) - typeorm,node 的 orm 框架,中文文档;[typeorm](https://typeorm.biunav.com/zh/) - mysql,最流行的关系型数据库管理系统; - elasticsearch,大数据处理;[elasticsearch](https://www.elastic.co/cn/) - moleculer,一个 Node.js 快速、可扩展、容错的微服务框架;[moleculer](https://moleculer.services/) ### 代码片段 框架为 vscode 内置了一些代码片段,加快开发效率 - entity,实体类(表结构); - config,模块配置; - controller,控制器(API 接口); - event,事件监听; - middleware,中间件,处理请求之前,请求之后的动作; - queue,队列; - service,服务(处理业务逻辑); > 当你需要使用分布式任务调度与队列功能,需要配置 redis。即使不配置 redis,midwayjs 也自带本地定时任务功能,可以满足部分需求,只是无法使用 admin 的界面操作 ## 目录 ### 主要目录 ├── .vscode(代码片段,根据关键字可以快速地生成代码) ├── public(静态资源文件,如 js、css 或者上传的文件) ├── src │ └── comm(通用库) │ └── modules(项目模块) │ └── config │ │ └── config.default.ts(默认配置,不区分环境,都生 效) │ │ └── config.local.ts(本地开发配置,对应 npm run dev) │ │ └── config.prod.ts(生产环境配置,对应 npm run start) │ │ └── plugin.ts(插件配置) │ └── configuration.ts(midway 的配置文件) │ └── welcome.ts(环境的 controller) │ └── interface.ts(类型声明) ├── test ├── package.json(依赖管理,项目信息) ├── bootstrap.js(生产环境启动入口文件,可借助 pm2 等 工具多进程启动) ├── server.js(生产环境 cfork 方式启动入口文件,多进 程) └── tsconfig.json ### 模块目录 ├── modules │ └── base(基础的权限管理系统) │ │ └── controller(api 接口) │ │ └── dto(参数校验) │ │ └── entity(实体类) │ │ └── middleware(中间件) │ │ └── schedule(定时任务) │ │ └── service(服务,写业务逻辑) │ │ └── config.ts(必须,模块的配置) │ │ └── init.sql(可选,初始化该模块的 sql) ### 路由前缀生成规则 - src/modules/demo/controller/app/goods.ts - 路由前缀是根据文件目录文件名按照规则生成的,上述示例生成的路由为http://127.0.0.1:8001/app/demo/goods/xxx - 下述生成的路由前缀为: /pay/demo/xxx(具体的方法) ├── modules │ └── demo(模块名) │ │ └── controller(api接口) │ │ │ └── app(参数校验) │ │ │ │ └── goods.ts(商品 controller) │ │ │ └── pay.ts(支付的controller) │ │ └── config.ts(必须,模块的配置) │ │ └── init.sql(可选,初始化该模块的sql) │ └── base(基础的权限管理系统) │ │ └── controller(api接口) │ │ └── dto(参数校验) │ │ └── entity(实体类) │ │ └── middleware(中间件) │ │ └── schedule(定时任务) │ │ └── service(服务,写业务逻辑) │ │ └── config.ts(必须,模块的配置) │ │ └── db.json(可选,初始化该模块的sql) │ │ └── menu.json(可选(7.x新增,配合模块市场使用),初始化该模块的菜单) #### 官网 [https://cool-js.com](https://cool-js.com) 以及[智谱 AI 开放平台](https://open.bigmodel.cn/) ## 运行 #### 修改数据库配置,配置文件位于`src/config/config.local.ts` 以 Mysql 为例,其他数据库请参考[数据库配置文档](https://cool-js.com/admin/node/quick.html#%E6%95%B0%E6%8D%AE%E5%BA%93%E9%85%8D%E7%BD%AE) Mysql(`>=5.7版本`),建议 8.0,node 版本(`>=16.x`),建议 18.x,首次启动会自动初始化并导入数据 ```ts // mysql,驱动已经内置,无需安装 typeorm: { dataSource: { default: { type: 'mysql', host: '127.0.0.1', port: 3306, username: 'root', password: '123456', database: 'cool', // 自动建表 注意:线上部署的时候不要使用,有可能导致数据丢失 synchronize: true, // 打印日志 logging: false, // 字符集 charset: 'utf8mb4', // 是否开启缓存 cache: true, // 实体路径 entities: ['**/modules/*/entity'], }, }, }, ``` #### 安装依赖并运行 ```bash $ npm i $ npm run dev $ open http://localhost:8001/ ``` 注: `npm i`如果安装失败可以尝试使用[cnpm](https://developer.aliyun.com/mirror/NPM?from=tnpm),或者切换您的镜像源,推荐使用[pnpm](https://pnpm.io/) ## CURD(快速增删改查) 大部分的后台管理系统,或者 API 服务都是对数据进行管理,所以可以看到大量的 CRUD 场景(增删改查),cool-admin 对此进行了大量地封装,让这块的编码量变得极其地少。 #### 新建一个数据表 `src/modules/demo/entity/goods.ts`,项目启动数据库会自动创建该表,无需手动创建 ```ts import { BaseEntity } from '@cool-midway/core'; import { Column, Entity, Index } from 'typeorm'; /** * 商品 */ @Entity('demo_app_goods') export class DemoAppGoodsEntity extends BaseEntity { @Column({ comment: '标题' }) title: string; @Column({ comment: '图片' }) pic: string; @Column({ comment: '价格', type: 'decimal', precision: 5, scale: 2 }) price: number; } ``` #### 编写 api 接口 `src/modules/demo/controller/app/goods.ts`,快速编写 6 个 api 接口 ```ts import { CoolController, BaseController } from '@cool-midway/core'; import { DemoAppGoodsEntity } from '../../entity/goods'; /** * 商品 */ @CoolController({ api: ['add', 'delete', 'update', 'info', 'list', 'page'], entity: DemoAppGoodsEntity, }) export class DemoAppGoodsController extends BaseController { /** * 其他接口 */ @Get('/other') async other() { return this.ok('hello, cool-admin!!!'); } } ``` 这样我们就完成了 6 个接口的编写,对应的接口如下: - `POST /app/demo/goods/add` 新增 - `POST /app/demo/goods/delete` 删除 - `POST /app/demo/goods/update` 更新 - `GET /app/demo/goods/info` 单个信息 - `POST /app/demo/goods/list` 列表信息 - `POST /app/demo/goods/page` 分页查询(包含模糊查询、字段全匹配等) ### 部署 [部署教程](https://cool-js.com/admin/node/other/deploy.html) ### 内置指令 - 使用 `npm run lint` 来做代码风格检查。 [midway]: https://midwayjs.org