什么是nestjs-starter-rest-api?一文读懂这个生产级NestJS 11单体REST API启动模板的全部功能
【免费下载链接】nestjs-starter-rest-apiNestJS Starter Kit. Monolithic Backend. REST API.项目地址: https://gitcode.com/gh_mirrors/ne/nestjs-starter-rest-api
nestjs-starter-rest-api是一个生产级的NestJS 11 单体(Monolithic)后端启动模板,开箱即用地提供REST API项目骨架:内置 JWT 认证、RBAC 角色权限控制、TypeORM 数据库迁移、winston 日志、请求参数校验、分页、Docker 一键部署与自动生成的 Swagger 接口文档。克隆下来即可完成一个可上线的后端项目雏形,让你把精力全部放在业务代码上 🚀
📦 功能总览:这套启动模板到底强在哪
项目设计原则是"尽量轻量",只保留生产环境真正需要的能力:
| 功能 | 实现方案 | 状态 |
|---|---|---|
| 🔐 认证 | JWT(RS256 非对称加密 + 刷新令牌) | ✅ 完成 |
| 🛡️ 授权 | RBAC 基于角色的访问控制 | ✅ 完成 |
| 🗄️ ORM 集成 | TypeORM + PostgreSQL | ✅ 完成 |
| 📦 数据库迁移 | TypeORM Migrations | ✅ 完成 |
| 📝 日志 | winston | ✅ 完成 |
| ✅ 请求校验 | class-validator | ✅ 完成 |
| 📄 接口文档 | 自动生成 OpenAPI / Swagger UI | ✅ 完成 |
| 🐳 部署 | Dockerfile + docker-compose + Devcontainer | ✅ 完成 |
| 📃 自动 Changelog | 基于 commitlint | 🚧 进行中 |
💡 核心价值:这些特性大多已经在 MonstarLab 的生产应用中经过验证,而不是"玩具级"示例。
🏗 项目结构:一眼看懂的单体分层架构
仓库采用"按领域模块划分"的组织方式,根入口见 src/app.module.ts:
src/ ├── auth/ # 认证模块:JWT 策略、登录/注册/刷新接口、角色守卫 ├── user/ # 用户模块:用户 CRUD + ACL 权限服务 ├── article/ # 文章模块:完整示例业务(controller/service/repository/entity/dto) └── shared/ # 共享模块:ACL 基础服务、配置、全局异常过滤器、日志、中间件 migrations/ # TypeORM 数据库迁移文件 test/ # E2E 端到端测试- src/auth/:包含本地登录、JWT 访问令牌、刷新令牌三套策略(src/auth/auth.module.ts),以及
RolesGuard角色守卫; - src/article/:一个"标准业务模块"范本,新建模块照抄这个结构即可;
- src/shared/:全局异常过滤器(统一响应格式)、Request-ID 中间件(src/shared/middlewares/request-id/request-id.middleware.ts)、日志服务等;
- migrations/:如
CreateUsers.ts、CreateArticles.ts等数据库结构变更脚本。
详细的目录说明可参考项目内置文档 docs/project-structure.md。
🔐 核心功能 1:JWT 认证 + RBAC 角色授权
认证流程:登录 → 签发访问令牌 + 刷新令牌(RS256 算法,公钥/私钥以 Base64 形式配置在.env中)→ 请求携带Bearer令牌 → JWT 守卫校验。相关实现位于 src/auth/guards/ 与 src/auth/strategies/。
授权(RBAC):模板内置一套 ACL(访问控制列表)机制,文档见 docs/acl.md:
- 每个领域模块继承
BaseAclService,例如文章模块的 src/article/services/article-acl.service.ts; - 用一行
canDo(ROLE.ADMIN, [Action.Manage])声明"管理员可管理所有文章"; - 支持自定义回调规则,例如"只有作者本人能修改自己的文章";
- 动作分为
Create / Read / Update / Delete / List / Manage,其中Manage是超级权限。
🎁 附赠:npm run cli:dev会在首次启动时自动创建默认管理员账号(src/cli.ts),省去手工造号。
🗄 核心功能 2:TypeORM + 数据库迁移
数据库操作全部通过 TypeORM 完成(连接配置见 ormconfig.ts),并提供完整的迁移命令:
npm run migration:generate --name=CreateUsers # 生成迁移文件 npm run migration:run # 执行迁移 npm run migration:revert # 回滚迁移迁移文件存放于migrations/目录,团队多人协作改表结构时不再"各改各的",这是生产项目的硬性要求。
📄 核心功能 3:Swagger 接口文档零成本生成
启动入口 src/main.ts 中已配置好 OpenAPI 生成:服务启动后访问/swagger即可在浏览器中获得可交互的接口文档,并统一挂载在/api/v1全局前缀下。全局还开启了 CORS、统一请求参数校验管道(class-validator),所有入参自动做类型与格式校验,脏数据进不了业务层。
🐳 一键启动步骤:最快配置方法(Docker)
无需在本地安装 Node 环境,三个命令跑起"应用 + PostgreSQL 16 + Adminer 数据库管理页":
# 1. 克隆仓库 git clone https://gitcode.com/gh_mirrors/ne/nestjs-starter-rest-api # 2. 准备环境变量 + 生成 JWT 密钥 cp .env.template .env ./scripts/generate-jwt-keys # 按输出把两行 Base64 密钥填入 .env # 3. 一键启动 docker compose up启动后:
| 入口 | 地址 |
|---|---|
| 📄 Swagger 接口文档 | http://localhost:3000/swagger |
| 🐘 Adminer 数据库面板 | http://localhost:8080 |
不想用 Docker 也可以:本地准备一个 PostgreSQL 服务后直接npm install && npm run start:dev。环境差异说明见 .env.template。
⚙️ 工程质量:这些"看不见的功能"同样值钱
| 工程能力 | 实现 | 说明 |
|---|---|---|
| 代码风格 | Prettier + ESLint | 提交前lint-staged自动格式化 |
| 提交规范 | husky + commitlint | 强制 Conventional Commits |
| 单元测试 | Jest | npm run test,含覆盖率报告 |
| 端到端测试 | Jest + Supertest | test/ 下 auth/user/article 全覆盖 |
| 代码质量 | SonarCloud | 配置见 sonar-project.properties |
| API 文档生成 | Compodoc | npm run doc:serve |
| 容器开发 | Devcontainer + Dockerfile | 团队环境完全一致 |
🚀 适用场景与上手建议
- ✅ 适合:用 NestJS 11 启动新后端项目、需要快速搭建带认证/权限/文档/容器化能力的 REST API;
- ✅ 学习价值高:
article模块是"标准业务模块"的教科书式示范,照葫芦画瓢即可扩展新业务; - ⚠️ 注意:这是单体架构模板,如果目标是微服务架构,请在业务早期就评估是否需要不同的脚手架。
一句话总结:nestjs-starter-rest-api = NestJS 11 + JWT/RBAC + TypeORM 迁移 + Swagger + Docker + 全套工程化,是从"空仓库"到"可上线 REST API"的最短路径。
【免费下载链接】nestjs-starter-rest-apiNestJS Starter Kit. Monolithic Backend. REST API.项目地址: https://gitcode.com/gh_mirrors/ne/nestjs-starter-rest-api
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考