moyin 310ee46910 feat:集成日志模块到应用主模块
- 在 AppModule 中导入 ConfigModule 和 LoggerModule
- 配置全局环境变量支持
- 确保日志服务在整个应用中可用
2025-12-13 16:20:06 +08:00
2025-12-13 16:18:56 +08:00

Pixel Game Server

一个基于 NestJS 的 2D 像素风游戏后端服务

技术栈

  • NestJS ^10.4.20 - 渐进式 Node.js 框架
  • TypeScript ^5.9.3 - 类型安全
  • Socket.IO - WebSocket 实时通信支持
  • RxJS ^7.8.2 - 响应式编程库
  • Pino ^10.1.0 - 高性能日志库
  • Jest ^29.7.0 - 测试框架

核心依赖

生产环境:

  • @nestjs/common ^10.4.20 - NestJS 核心功能
  • @nestjs/core ^10.4.20 - NestJS 核心模块
  • @nestjs/config ^4.0.2 - 配置管理
  • @nestjs/platform-express ^10.4.20 - Express 平台适配器
  • @nestjs/websockets ^10.4.20 - WebSocket 支持
  • @nestjs/platform-socket.io ^10.4.20 - Socket.IO 适配器
  • nestjs-pino ^4.5.0 - Pino 日志集成
  • pino ^10.1.0 - 高性能日志库
  • reflect-metadata ^0.1.14 - 装饰器元数据支持
  • rxjs ^7.8.2 - 响应式编程

开发环境:

  • @nestjs/cli ^10.4.9 - NestJS 命令行工具
  • @nestjs/schematics ^10.2.3 - NestJS 代码生成器
  • @nestjs/testing ^10.4.20 - 测试工具
  • @types/jest ^29.5.14 - Jest 类型定义
  • @types/node ^20.19.26 - Node.js 类型定义
  • jest ^29.7.0 - 测试框架
  • ts-jest ^29.2.5 - TypeScript Jest 支持
  • ts-node ^10.9.2 - TypeScript 运行时
  • typescript ^5.9.3 - TypeScript 编译器
  • pino-pretty ^13.1.3 - Pino 美化输出

开发规范

命名规范

项目采用统一的命名规范,确保代码风格一致:

  • 文件/文件夹:下划线分隔(如 order_controller.ts
  • 变量/函数:小驼峰命名(如 userNameasync queryUserInfo()
  • 类/构造函数:大驼峰命名(如 UserModelOrderService
  • 常量:全大写 + 下划线(如 PORTDB_HOST
  • 接口路由:全小写 + 短横线(如 /user/get-info/order/create-order

详细规范请查看:命名规范文档

Git 提交规范

项目采用约定式提交规范,提交信息格式:<类型><简短描述>

常用提交类型:

  • feat - 新增功能
  • fix - 修复 Bug
  • docs - 文档更新
  • style - 代码格式调整
  • refactor - 代码重构
  • perf - 性能优化
  • test - 测试相关
  • chore - 构建/工具变动

后端特定类型:

  • api - API 接口
  • db - 数据库
  • websocket - WebSocket
  • auth - 认证授权
  • dto - 数据传输对象
  • service - 服务层

核心原则:

  • 一次提交只做一件事
  • 使用中文冒号
  • 简短明确(不超过 50 字符)
  • 能拆分就拆分,保持提交历史清晰

示例:

git commit -m "feat实现玩家注册和登录功能"
git commit -m "fix修复房间加入时的并发问题"
git commit -m "api添加玩家信息查询接口"

详细规范请查看:Git 提交规范文档

后端开发规范

项目要求严格的代码质量和可维护性标准:

核心要求:

  • 完整注释:每个模块、类、方法都必须有详细注释
  • 全面业务逻辑:考虑所有可能情况,包括异常和边界条件
  • 关键日志记录:重要操作必须记录日志,便于问题排查
  • 防御性编程:对所有输入进行验证,实现健壮的错误处理

注释要求:

/**
 * 玩家服务类
 * 
 * 职责:处理玩家相关的业务逻辑
 * 主要方法createPlayer(), updatePlayerInfo(), getPlayerById()
 * 使用场景:玩家注册登录流程、个人陈列室数据管理
 */
@Injectable()
export class PlayerService {
  /**
   * 创建新玩家
   * @param email 玩家邮箱地址
   * @param nickname 玩家昵称
   * @returns Promise<Player> 创建成功的玩家对象
   * @throws BadRequestException 当邮箱格式错误时
   */
  async createPlayer(email: string, nickname: string): Promise<Player> {
    // 详细的业务逻辑实现...
  }
}

详细规范请查看:后端开发规范指南

文档

前置要求

  • Node.js >= 18.0.0
  • pnpm >= 8.0.0(推荐)

如果还没有安装 pnpm请先安装

npm install -g pnpm

检查版本:

node --version
pnpm --version

安装依赖

pnpm install

开发

启动开发服务器(支持热重载):

pnpm dev

服务器将运行在 http://localhost:3000

测试

运行测试:

pnpm test

运行测试并监听文件变化:

pnpm test:watch

运行测试并生成覆盖率报告:

pnpm test:cov

构建

pnpm build

生产环境运行

pnpm start:prod

项目结构

src/
├── api/              # API 接口层(控制器、网关)
├── business/         # 业务逻辑层
├── core/             # 核心功能模块
│   ├── db/           # 数据库相关
│   └── utils/        # 工具函数
│       └── logger/   # 日志系统
├── main.ts           # 应用入口
├── app.module.ts     # 根模块
├── app.controller.ts # 根控制器
└── app.service.ts    # 根服务
test/
├── api/              # API 测试
└── service/          # 服务测试
docs/                 # 项目文档
├── backend_development_guide.md  # 后端开发规范
├── git_commit_guide.md          # Git 提交规范
├── naming_convention.md         # 命名规范
└── nestjs_guide.md             # NestJS 使用指南

核心功能

日志系统

项目集成了完整的日志系统,基于 Pino 高性能日志库:

特性:

  • 🚀 高性能日志记录
  • 🔒 自动敏感信息过滤
  • 🎯 多级别日志控制
  • 🔍 请求上下文绑定
  • 📊 结构化日志输出

使用示例:

import { AppLoggerService } from './core/utils/logger/logger.service';

@Injectable()
export class UserService {
  constructor(private readonly logger: AppLoggerService) {}

  async createUser(userData: CreateUserDto) {
    this.logger.info('开始创建用户', {
      operation: 'createUser',
      email: userData.email,
      timestamp: new Date().toISOString()
    });

    try {
      const user = await this.userRepository.save(userData);
      
      this.logger.info('用户创建成功', {
        operation: 'createUser',
        userId: user.id,
        email: userData.email
      });

      return user;
    } catch (error) {
      this.logger.error('用户创建失败', {
        operation: 'createUser',
        email: userData.email,
        error: error.message
      }, error.stack);
      
      throw error;
    }
  }
}

详细使用方法请参考:后端开发规范指南 - 日志系统使用指南

下一步

  • src/api/ 目录下创建游戏相关的控制器和网关
  • src/model/ 目录下定义游戏数据模型
  • src/service/ 目录下实现游戏业务逻辑
  • 使用 NestJS CLI 快速生成模块:nest g module game
  • 添加 WebSocket 网关实现实时游戏逻辑
Description
No description provided
Readme MIT 2.8 MiB
Languages
TypeScript 99.9%