logo
0
0
WeChat Login
jiamao<haofefe@163.com>
初始化命令集成

WebServer - Midway.js + Vue3 + TypeScript 全栈模板项目

一个基于 Midway.js + Vue3 + TypeScript + TypeORM + Bootstrap5 的现代化全栈开发模板,提供完整的用户管理、权限控制、文件上传等功能。

🚀 技术栈

后端技术栈

  • 框架: Midway.js 3.x (Node.js 企业级框架)
  • 语言: TypeScript
  • 数据库: MySQL + TypeORM
  • 认证: 基于 Session 的用户认证
  • 文件上传: Busboy + 腾讯云 COS
  • API 文档: Swagger UI
  • 缓存: Cache Manager
  • 日志: 内置日志系统

前端技术栈

  • 框架: Vue 3.5.x + Composition API
  • 构建工具: Vite 7.x
  • UI 框架: Bootstrap 5 + Bootstrap Icons
  • 状态管理: Pinia + Vuex 4 (兼容模式)
  • 路由: Vue Router 4
  • 类型检查: TypeScript
  • 图表库: ECharts 6
  • 表格组件: Element Plus
  • 工具库: Lodash-es, Day.js, Axios

开发工具

  • 代码规范: ESLint + Prettier
  • 测试框架: Jest + Vitest
  • 容器化: Docker + Docker Compose
  • 进程管理: PM2

📁 项目结构

template/ ├── bin/ # 脚本文件 │ ├── init.js # 项目初始化脚本(自动安装依赖) │ ├── dev.sh # 开发环境启动脚本 │ ├── build.sh # 构建脚本 │ └── deploy.sh # 部署脚本 ├── src/ # 后端源码 │ ├── config/ # 配置文件 │ │ ├── config.default.ts # 默认配置 │ │ ├── config.local.ts # 本地配置 │ │ └── devops.config.ts # DevOps 配置 │ ├── controller/ # 控制器 │ │ ├── admin.controller.ts # 管理员接口 │ │ ├── user.controller.ts # 用户接口 │ │ ├── session.controller.ts # 会话接口 │ │ └── home.controller.ts # 主页接口 │ ├── service/ # 业务逻辑层 │ │ ├── user.service.ts # 用户服务 │ │ ├── session.service.ts # 会话服务 │ │ └── account.service.ts # 账户服务 │ ├── model/ # 数据模型 (TypeORM 实体) │ │ └── user.entity.ts # 用户实体 │ ├── dto/ # 数据传输对象 │ ├── filter/ # 过滤器 │ ├── guard/ # 守卫 │ └── configuration.ts # 应用配置 ├── web/ # 前端源码 │ ├── src/ │ │ ├── platform/ # 平台核心 │ │ │ ├── App.vue # 根组件 │ │ │ ├── index.ts # 入口文件 │ │ │ └── router.ts # 路由配置 │ │ ├── pages/ # 页面组件 │ │ │ └── login.vue # 登录页面 │ │ ├── components/ # 公共组件 │ │ │ ├── dataGrid/ # 数据表格 │ │ │ ├── loading/ # 加载组件 │ │ │ ├── modal/ # 模态框 │ │ │ └── toast/ # 消息提示 │ │ ├── service/ # API 服务 │ │ │ ├── login.ts # 登录服务 │ │ │ ├── account.ts # 账户服务 │ │ │ └── base.ts # 基础服务 │ │ ├── stores/ # 状态管理 (Pinia) │ │ │ └── session.ts # 会话状态 │ │ ├── utils/ # 工具函数 │ │ ├── base/ # 基础层 │ │ └── domain/ # 领域层 │ ├── public/ # 静态资源 │ ├── view/ # HTML 模板 │ └── vite.config.ts # Vite 配置 ├── data/ # 数据文件 │ └── db_myproject_t_user.sql # 数据库初始化脚本 ├── logs/ # 日志目录 ├── dist/ # 构建输出 ├── typings/ # 类型定义 ├── .env # 环境变量 ├── bootstrap.js # 启动入口 ├── package.json # 后端依赖 └── README.md # 项目文档

🛠️ 快速开始

环境要求

  • Node.js >= 20.0.0
  • MySQL >= 5.7
  • pnpm (推荐) 或 npm

1. 克隆项目

git clone <repository-url> cd template

2. 安装依赖

方式一:一键安装(推荐)

# 自动检测并使用 pnpm(优先)或 npm 安装所有依赖 npm run init

方式二:手动安装

# 安装后端依赖 npm install # 安装前端依赖 cd web npm install cd ..

3. 环境配置

复制环境变量模板并修改:

cp .tpl.env .env

编辑 .env 文件,配置数据库和其他环境变量:

# 数据库配置 DB_HOST=localhost DB_PORT=3306 DB_USERNAME=root DB_PASSWORD=your_password DB_DATABASE=db_myproject # 服务器配置 PORT=7001 IP=127.0.0.1 # 前端配置 VITE_PORT=5173 PREFIX=/api API_URL=http://localhost:7001/api # 其他配置 TITLE=WebServer Application

4. 数据库初始化

# 导入数据库结构和初始数据 mysql -u root -p db_myproject < data/db_myproject_t_user.sql

5. 启动开发服务器

方式一:使用脚本启动(推荐)

npm run dev

这将同时启动前后端开发服务器。

方式二:分别启动

# 启动后端 (端口 7001) npm run dev:midway # 启动前端 (端口 5173) npm run dev:vue

6. 访问应用

📖 核心功能

🔐 用户认证系统

  • 基于 Session 的用户认证
  • 支持管理员和普通用户角色
  • 登录状态持久化
  • 权限控制装饰器

👥 用户管理

  • 用户增删改查
  • 分页搜索和筛选
  • 头像上传(支持腾讯云 COS)
  • 密码修改
  • 用户启用/禁用

📁 文件上传

  • 支持多种文件格式
  • 自动上传到腾讯云 COS
  • 文件大小限制
  • 临时文件清理

🎨 前端特性

  • 响应式设计,支持移动端
  • 组件化开发
  • 状态管理(Pinia)
  • 路由懒加载
  • TypeScript 类型检查
  • Vite 热更新

🔧 开发指南

后端开发

创建新的控制器

// src/controller/example.controller.ts import { Controller, Get, Provide } from '@midwayjs/core'; import { BaseController } from '@cicctencent/midwayjs-base'; @Provide() @Controller('/api/example') export class ExampleController extends BaseController { @Get('/list') async list() { return { ret: 0, data: [], msg: 'success' }; } }

创建新的服务

// src/service/example.service.ts import { Provide, Inject } from '@midwayjs/core'; @Provide() export class ExampleService { async getData() { return []; } }

创建数据模型

// src/model/example.entity.ts import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; import BaseEntity from '@fefeding/common/dist/models/base/baseORM'; @Entity('t_example') export class ExampleEntity extends BaseEntity { @PrimaryGeneratedColumn() id: number; @Column({ length: 100 }) name: string; }

前端开发

创建新的页面

<!-- web/src/pages/example.vue --> <template> <div class="container"> <h1>示例页面</h1> </div> </template> <script setup lang="ts"> import { ref } from 'vue'; </script>

创建 API 服务

// web/src/service/example.ts import { request } from '../utils/request'; export const getExampleList = () => { return request.get('/api/example/list'); };

创建状态管理

// web/src/stores/example.ts import { defineStore } from 'pinia'; export const useExampleStore = defineStore('example', { state: () => ({ data: [] }), actions: { async fetchData() { // 获取数据逻辑 } } });

🚀 部署指南

1. 构建项目

# 构建前后端 npm run build

2. 生产环境启动

# 使用 PM2 启动 npm start # 或直接启动 node bootstrap.js

3. Docker 部署

开发环境

docker-compose -f bin/docker/dev-docker-compose.yml up --build

生产环境

docker-compose -f bin/docker/prod-docker-compose.yml up -d

4. TARS 部署(腾讯云)

npm run tars:deploy

📝 API 文档

用户相关接口

接口方法路径描述
用户搜索POST/api/user/search分页获取用户列表
用户详情POST/api/user/getUserDetail获取用户详细信息
创建用户POST/api/user/create创建新用户
更新用户POST/api/user/update更新用户信息
修改密码POST/api/user/updatePassword修改用户密码
设置状态POST/api/user/setStatus启用/禁用用户
上传头像POST/api/user/uploadAvatar上传用户头像

统一返回格式

interface ApiResponse<T> { ret: number; // 0 成功,1 失败 data?: T; // 数据 msg: string; // 消息 }

🧪 测试

运行测试

# 后端测试 npm test # 前端单元测试 cd web && npm run test:unit # 测试覆盖率 npm run cov

代码检查

# 代码规范检查 npm run lint # 自动修复 npm run lint:fix

📦 常用命令

开发相关

  • npm run init - 一键安装所有依赖(自动检测 pnpm/npm)
  • npm run dev - 启动开发环境(前后端)
  • npm run dev:midway - 仅启动后端
  • npm run dev:vue - 仅启动前端
  • npm run dev:all - 并行启动前后端

构建相关

  • npm run build - 构建生产版本
  • npm run build:vue - 构建前端
  • npm run build:midway - 构建后端

部署相关

  • npm start - 生产环境启动
  • npm restart - 重启服务
  • npm stop - 停止服务
  • npm run deploy - 完整部署流程

其他

  • npm run zip - 打包为 server.zip
  • npm run docker - 构建 Docker 镜像

🔧 配置说明

后端配置 (src/config/)

  • config.default.ts - 默认配置
  • config.local.ts - 本地开发配置
  • devops.config.ts - DevOps 相关配置

前端配置

  • web/vite.config.ts - Vite 构建配置
  • web/tsconfig.json - TypeScript 配置

环境变量

详见 .env.example 文件中的配置说明。

🤝 贡献指南

  1. Fork 本仓库
  2. 创建特性分支:git checkout -b feature/new-feature
  3. 提交更改:git commit -am 'Add new feature'
  4. 推送分支:git push origin feature/new-feature
  5. 提交 Pull Request

📄 许可证

本项目基于 MIT 许可证开源。

🆘 常见问题

Q: 如何添加新的数据库表?

A: 在 src/model/ 目录下创建新的实体文件,然后运行数据库迁移。

Q: 如何修改 API 前缀?

A: 修改 src/config/devops.config.ts 中的 prefixUrl 配置。

Q: 如何配置 CORS?

A: 后端默认支持 CORS,可在 src/config/config.default.ts 中进行详细配置。

Q: 如何添加新的权限控制?

A: 使用 @decorators.checkLogin() 装饰器,或在配置中添加 auth.ignores 规则。

📞 技术支持

如有问题,请提交 Issue 或联系项目维护者。


注意: 这是一个模板项目,请根据实际业务需求进行调整和扩展。