Skip to content

快速开始

1. 创建 NestJS 项目

如果还没有 NestJS 项目,可以使用 Nest CLI 创建一个:

bash
pnpm dlx @nestjs/cli new my-project --package-manager pnpm

2. 安装依赖

安装 @lzui/nest-crud 和相关依赖:

bash
pnpm add @lzui/nest-crud @nestjs/typeorm typeorm pg

3. 创建实体

创建一个 User 实体:

typescript
// src/module/user/user.entity.ts
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
import { BaseStatusByIdTimeDelFlagEntity } from '@lzui/nest-crud';

@Entity()
export class User extends BaseStatusByIdTimeDelFlagEntity {

  @Column()
  name: string;

  @Column()
  email: string;

  @Column()
  age: number;
}

实体继承的优势

通过继承 BaseStatusByIdTimeDelFlagEntity ,User 实体自动获得了以下字段和功能:

  • id - 使用雪花算法生成的主键
  • status - 状态字段(0正常 1停用)
  • createBy - 创建者
  • updateBy - 更新者
  • createTime - 创建时间
  • updateTime - 更新时间
  • remark - 备注
  • delFlag - 删除标志 这样可以减少重复代码,确保所有实体都遵循统一的结构和规范。

4. 创建服务

创建一个 User 服务,继承 BaseService:

typescript
// src/module/user/user.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { BaseService } from '@lzui/nest-crud';
import { User } from './user.entity';

@Injectable()
export class UserService extends BaseService<User> {
  constructor(
    @InjectRepository(User)
    repository: Repository<User>,
  ) {
    super(repository);
  }
}

5. 创建控制器

创建一个 User 控制器,使用 CrudController 装饰器:

typescript
// src/module/user/user.controller.ts
import { Controller } from '@nestjs/common';
import { CrudController, BaseController } from '@lzui/nest-crud';
import { User } from './user.entity';
import { UserService } from './user.service';

@CrudController({
  prefix: 'api/v1/user',
  api: ['add', 'delete', 'update', 'info', 'list', 'page'],
  entity: User,
})
export class UserController extends BaseController {
  constructor(private readonly userService: UserService) {
    super();
  }
}

6. 创建模块

创建 User 模块,导入所需的依赖:

typescript
// src/module/user/user.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './user.entity';
import { UserService } from './user.service';
import { UserController } from './user.controller';

@Module({
  imports: [TypeOrmModule.forFeature([User])],
  controllers: [UserController],
  providers: [UserService],
})
export class UserModule {}

7. 配置 MainModule

在 MainModule 中配置 TypeOrmModule:

typescript
// src/main.module.ts
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';

import { UserModule } from './module/user/user.module';

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
    }),
    TypeOrmModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: (configService: ConfigService) => ({
        type: 'postgres',
        host: configService.get('DB_HOST', 'localhost'),
        port: configService.get('DB_PORT', 5432),
        username: configService.get('DB_USERNAME', 'postgres'),
        password: configService.get('DB_PASSWORD', 'password'),
        database: configService.get('DB_DATABASE', 'test_app'),
        entities: [__dirname + '/**/*.entity{.ts,.js}'],
        /* 自动加载 */
        autoLoadEntities: true,
        /** 时区 */
        timezone: '+08:00',
        /** 自动同步数据库 schema */
        synchronize: true,
        /** 开启日志 */
        logging: true,
        /***** 数据库连接重试配置 ****/
        retryAttempts: 10, // 重试次数
        retryDelay: 3000, // 重试延迟(毫秒)
        keepConnectionAlive: true, // 保持连接活跃
        /** 连接池配置 */
        poolSize: 10, // 连接池大小
        connectTimeoutMS: 20000, // 连接超时时间(毫秒)
        acquireTimeoutMS: 20000, // 获取连接超时时间(毫秒)
      }),
      inject: [ConfigService],
    }),
    UserModule,
  ],
  controllers: [],
  providers: [],
})
export class MainModule {}

8. 启动应用

bash
pnpm run start:dev

9. 访问 API

应用启动后,可以访问以下 API 端点:

  • GET /user - 获取所有用户(支持分页)
  • GET /user/:id - 获取单个用户
  • POST /user - 创建用户
  • PUT /user/:id - 更新用户
  • DELETE /user/:id - 删除用户

下一步