Appearance
快速开始
1. 创建 NestJS 项目
如果还没有 NestJS 项目,可以使用 Nest CLI 创建一个:
bash
pnpm dlx @nestjs/cli new my-project --package-manager pnpm2. 安装依赖
安装 @lzui/nest-crud 和相关依赖:
bash
pnpm add @lzui/nest-crud @nestjs/typeorm typeorm pg3. 创建实体
创建一个 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:dev9. 访问 API
应用启动后,可以访问以下 API 端点:
GET /user- 获取所有用户(支持分页)GET /user/:id- 获取单个用户POST /user- 创建用户PUT /user/:id- 更新用户DELETE /user/:id- 删除用户