# nestJS **Repository Path**: bowen1314/nest-js ## Basic Information - **Project Name**: nestJS - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-27 - **Last Updated**: 2025-10-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # NestJS 用户认证系统 基于 NestJS 框架构建的后端应用程序,包含完整的用户注册、登录、JWT 认证功能。 ## 描述 这是一个使用 [NestJS](https://nestjs.com/) 框架搭建的项目,实现了标准的后端架构设计,包括: - ✅ 用户注册与登录 - ✅ JWT Token 认证 - ✅ 密码加密存储(bcrypt) - ✅ 角色权限控制(RBAC) - ✅ 请求参数验证 - ✅ 统一响应格式 - ✅ 异常处理 - ✅ TypeORM + MySQL 数据库 ## 快速开始 ### 1. 安装依赖 ```bash npm install ``` ### 2. 配置环境变量 复制 `.env.example` 文件为 `.env` 并修改配置: ```bash # 数据库配置 DB_HOST=localhost DB_PORT=3306 DB_USERNAME=root DB_PASSWORD=root DB_DATABASE=nest_app # JWT 配置 JWT_SECRET=your-secret-key-change-this-in-production JWT_EXPIRES_IN=7d ``` ### 3. 创建数据库 确保 MySQL 已启动,创建数据库: ```sql CREATE DATABASE nest_app CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` ### 4. 启动应用 应用启动后会自动创建数据表(开发环境)。 ```bash npm run start:dev ``` 应用默认运行在 `http://localhost:3001` ## 运行应用 ```bash # 开发模式 npm run start # 监听模式(自动重启) npm run start:dev # 调试模式 npm run start:debug # 生产模式 npm run start:prod ``` ## 测试 ```bash # 单元测试 npm run test # 端到端测试 npm run test:e2e # 测试覆盖率 npm run test:cov # 监听模式运行测试 npm run test:watch ``` ## 构建 ```bash npm run build ``` ## 代码质量 ```bash # 代码格式化 npm run format # 代码检查 npm run lint ``` ## 项目结构 ``` nest-app/ ├── src/ │ ├── common/ # 公共模块 │ │ ├── decorators/ # 自定义装饰器 │ │ │ ├── current-user.decorator.ts # 当前用户装饰器 │ │ │ ├── public.decorator.ts # 公开接口装饰器 │ │ │ └── roles.decorator.ts # 角色装饰器 │ │ ├── dto/ # 公共 DTO │ │ │ └── pagination.dto.ts # 分页 DTO │ │ ├── entities/ # 基础实体 │ │ │ └── base.entity.ts # 基础实体类 │ │ ├── filters/ # 异常过滤器 │ │ │ └── http-exception.filter.ts │ │ ├── guards/ # 守卫 │ │ │ ├── jwt-auth.guard.ts # JWT 认证守卫 │ │ │ └── roles.guard.ts # 角色守卫 │ │ ├── interceptors/ # 拦截器 │ │ │ └── transform.interceptor.ts │ │ └── interfaces/ # 接口定义 │ │ └── response.interface.ts │ ├── modules/ # 业务模块 │ │ ├── auth/ # 认证模块 │ │ │ ├── dto/ │ │ │ │ ├── login.dto.ts │ │ │ │ └── register.dto.ts │ │ │ ├── strategies/ # Passport 策略 │ │ │ │ ├── jwt.strategy.ts │ │ │ │ └── local.strategy.ts │ │ │ ├── auth.controller.ts │ │ │ ├── auth.service.ts │ │ │ └── auth.module.ts │ │ └── user/ # 用户模块 │ │ ├── dto/ │ │ │ ├── change-password.dto.ts │ │ │ └── update-user.dto.ts │ │ ├── entities/ │ │ │ └── user.entity.ts │ │ ├── user.controller.ts │ │ ├── user.service.ts │ │ └── user.module.ts │ ├── app.controller.ts # 应用控制器 │ ├── app.module.ts # 应用根模块 │ ├── app.service.ts # 应用服务 │ └── main.ts # 应用入口文件 ├── test/ # 测试文件 ├── .env # 环境变量配置 ├── .env.example # 环境变量示例 ├── API.md # API 接口文档 ├── DATABASE.md # 数据库设计文档 ├── nest-cli.json # Nest CLI 配置 ├── package.json # 项目依赖 ├── tsconfig.json # TypeScript 配置 └── README.md # 项目说明 ``` ## 技术栈 - [NestJS](https://nestjs.com/) - 渐进式 Node.js 框架 - [TypeScript](https://www.typescriptlang.org/) - JavaScript 的超集 - [TypeORM](https://typeorm.io/) - ORM 框架 - [MySQL](https://www.mysql.com/) - 关系型数据库 - [Passport](http://www.passportjs.org/) - 认证中间件 - [JWT](https://jwt.io/) - JSON Web Token - [bcrypt](https://github.com/kelektiv/node.bcrypt.js) - 密码加密 - [class-validator](https://github.com/typestack/class-validator) - 参数验证 - [class-transformer](https://github.com/typestack/class-transformer) - 对象转换 - [Jest](https://jestjs.io/) - 测试框架 ## 主要功能 ### 认证功能 - **用户注册** - `POST /api/auth/register` - **用户登录** - `POST /api/auth/login` - **刷新 Token** - `POST /api/auth/refresh` - **获取当前用户** - `GET /api/auth/me` ### 用户管理 - **获取个人信息** - `GET /api/users/profile` - **更新个人信息** - `PUT /api/users/profile` - **修改密码** - `PUT /api/users/password` - **获取用户列表** - `GET /api/users` (仅管理员) - **更新用户信息** - `PUT /api/users/:id` (仅管理员) - **切换用户状态** - `PUT /api/users/:id/toggle-status` (仅管理员) - **删除用户** - `DELETE /api/users/:id` (仅管理员) 详细 API 文档请查看 [API.md](./API.md) ## 核心特性 ### 1. JWT 认证 所有需要认证的接口都需要在请求头中携带 JWT Token: ``` Authorization: Bearer {your_jwt_token} ``` 使用 `@Public()` 装饰器可以标记公开接口(无需认证)。 ### 2. 角色权限控制 使用 `@Roles()` 装饰器限制接口访问权限: ```typescript @Roles('admin') @UseGuards(RolesGuard) @Get('users') async findAll() { // 仅管理员可访问 } ``` ### 3. 请求参数验证 使用 class-validator 进行自动参数验证: ```typescript export class RegisterDto { @IsString() @MinLength(3) @MaxLength(20) username: string; } ``` ### 4. 统一响应格式 所有接口响应统一格式: ```json { "code": 200, "message": "操作成功", "data": {}, "timestamp": 1234567890 } ``` ### 5. 密码安全 - 使用 bcrypt 进行密码加密(强度 10) - 密码必须包含大小写字母和数字 - 密码在响应中自动隐藏 ## 开发说明 ### 环境要求 - Node.js >= 16.x - MySQL >= 5.7 - npm >= 8.x ### API 测试 推荐使用 [Postman](https://www.postman.com/) 或 [Apifox](https://www.apifox.cn/) 进行接口测试。 ### 数据库设计 详细数据库设计文档请查看 [DATABASE.md](./DATABASE.md) ## 支持 访问 [NestJS 官方文档](https://docs.nestjs.com) 获取更多信息。 ## 许可证 [MIT licensed](LICENSE)