# nest-demo **Repository Path**: skyyong/nest-demo ## Basic Information - **Project Name**: nest-demo - **Description**: nest 项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-15 - **Last Updated**: 2025-08-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # NestJS 示例项目 ## 项目简介 这是一个使用 NestJS 框架构建的示例项目,包含用户认证和 CRUD 功能。 ## 项目结构 ``` ├── .gitignore ├── .prettierrc ├── README.md ├── eslint.config.mjs ├── nest-cli.json ├── package.json ├── pnpm-lock.yaml ├── src/ │ ├── app.controller.spec.ts │ ├── app.controller.ts │ ├── app.module.ts │ ├── app.service.ts │ ├── common/ │ │ ├── common.module.ts │ │ └── utils/ │ ├── core/ │ │ ├── auth/ │ │ ├── filters/ │ │ └── interceptors/ │ ├── dto/ │ │ └── user/ │ ├── entities/ │ │ ├── post.entity.ts │ │ └── user.entity.ts │ ├── feature/ │ │ ├── post/ │ │ └── user/ │ └── main.ts ├── test/ │ ├── app.e2e-spec.ts │ └── jest-e2e.json ├── tsconfig.build.json └── tsconfig.json ``` ## 功能实现 - 用户认证(登录、注册) - 用户管理(创建、查询、更新、删除) - 权限控制 ## API 文档 ### 认证接口 #### 登录 - **URL**: `/user/login` - **Method**: `POST` - **请求体**: ```json { "account": "admin", "password": "admin" } ``` - **响应**: ```json { "user": { "id": 1, "account": "admin", "name": "Admin User", "role": "admin", "createTime": "2023-10-01T00:00:00.000Z", "updateTime": "2023-10-01T00:00:00.000Z" }, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." } ``` ### 用户接口 所有用户接口(除登录外)需要在请求头中添加认证token: `Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...` #### 创建用户 - **URL**: `/user` - **Method**: `POST` - **请求体**: ```json { "account": "test", "password": "test", "name": "Test User", "role": "user" } ``` #### 查询用户 - **URL**: `/user` - **Method**: `GET` #### 查询单个用户 - **URL**: `/user/:id` - **Method**: `GET` #### 更新用户 - **URL**: `/user/:id` - **Method**: `PUT` - **请求体**: ```json { "name": "Updated User", "role": "admin" } ``` #### 删除用户 - **URL**: `/user/:id` - **Method**: `DELETE` ## 环境配置 1. 安装依赖: ```bash pnpm install ``` 2. 配置数据库: 修改 `app.module.ts` 中的数据库连接信息 3. 运行项目: ```bash pnpm run start:dev ``` 4. 访问 Swagger 文档: [http://localhost:8088/api](http://localhost:8088/api) ## Token 调试指南 ### 常见问题 1. **未提供token** - 检查请求头中是否包含 `Authorization: Bearer ` - 确保token正确添加到请求头中 2. **无效的token** - 检查token是否过期(默认60秒) - 确认JWT secret在`app.module.ts`中的配置是否正确 - 检查token生成和验证逻辑是否一致 3. **JWT配置冲突** - 确保只在`app.module.ts`中全局注册`JwtModule` - 其他模块不要重复注册`JwtModule` ### 调试步骤 1. 检查`app.module.ts`中的JWT配置: ```typescript JwtModule.register({ secret: 'your-secret-key', // 确保使用安全的密钥 signOptions: { expiresIn: '60s' }, // 确认过期时间 global: true, // 确保设置为全局模块 }) ``` 2. 检查`auth.guard.ts`中的token验证逻辑: ```typescript const payload = await this.jwtService.verifyAsync(token); ``` 不要在`verifyAsync`中硬编码secret,让它使用全局配置 3. 检查`user.service.ts`中的token生成逻辑: ```typescript const token = this.jwtService.sign({ id: user.id, account: user.account, role: user.role, }); ``` 确保只传递payload,不传递secret和expiresIn选项 4. 使用JWT调试工具(如[https://jwt.io/](https://jwt.io/))验证token的有效性 5. 检查网络请求和响应,确保token正确传递和处理 ## 安全注意事项 1. 生产环境中,不要硬编码secret,应使用环境变量 2. 定期更换secret 3. 适当设置token过期时间,不要过长 4. 敏感操作需要额外的权限验证 5. 实施HTTPS以保护传输中的token