在 NestJS 中使用 TypeORM 进行 CRUD 操作涉及几个关键步骤。以下是详细的步骤及方法解释:

1. 安装依赖

首先,确保安装了必要的依赖包:

npm install @nestjs/typeorm typeorm pg
  • @nestjs/typeorm:NestJS 的 TypeORM 模块。
  • typeorm:TypeORM ORM 库。
  • pg:PostgreSQL 驱动(根据使用的数据库选择相应的驱动)。

2. 配置 TypeORM

app.module.ts 中配置 TypeORM:使用TTypeOrmModule.forRoot()方法链接数据库

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserModule } from './user/user.module';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'postgres',
      host: 'localhost',
      port: 5432,
      username: 'your_username',
      password: 'your_password',
      database: 'your_database',
      entities: [__dirname + '/**/*.entity{.ts,.js}'],
      synchronize: true, // 生产环境中应禁用此选项
    }),
    UserModule,
  ],
})
export class AppModule {}

3. 创建实体

创建一个用户实体 user.entity.ts

import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  username: string;

  @Column()
  password: string;
}

4. 创建服务

创建一个用户服务 user.service.ts

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';
import { CreateUserDto } from './dto/create-user.dto';

@Injectable()
export class UserService {
  constructor(
    @InjectRepository(User)
    private userRepository: Repository<User>,
  ) {}

  // 创建用户
  async create(createUserDto: CreateUserDto): Promise<User> {
    const user = this.userRepository.create(createUserDto);
    return this.userRepository.save(user);
  }

  // 获取所有用户
  async findAll(): Promise<User[]> {
    return this.userRepository.find();
  }

  // 根据ID获取用户
  async findOne(id: number): Promise<User> {
    return this.userRepository.findOneBy({ id });
  }

  // 更新用户
  async update(id: number, updateUserDto: CreateUserDto): Promise<User> {
    await this.userRepository.update(id, updateUserDto);
    return this.userRepository.findOneBy({ id });
  }

  // 删除用户
  async remove(id: number): Promise<void> {
    await this.userRepository.delete(id);
  }
}

5. 创建控制器

创建一个用户控制器 user.controller.ts

import { Controller, Get, Post, Put, Delete, Body, Param } from '@nestjs/common';
import { UserService } from './user.service';
import { CreateUserDto } from './dto/create-user.dto';

@Controller('users')
export class UserController {
  constructor(private readonly userService: UserService) {}

  // 创建用户
  @Post()
  async create(@Body() createUserDto: CreateUserDto) {
    return this.userService.create(createUserDto);
  }

  // 获取所有用户
  @Get()
  async findAll() {
    return this.userService.findAll();
  }

  // 根据ID获取用户
  @Get(':id')
  async findOne(@Param('id') id: string) {
    return this.userService.findOne(+id);
  }

  // 更新用户
  @Put(':id')
  async update(@Param('id') id: string, @Body() updateUserDto: CreateUserDto) {
    return this.userService.update(+id, updateUserDto);
  }

  // 删除用户
  @Delete(':id')
  async remove(@Param('id') id: string) {
    return this.userService.remove(+id);
  }
}

6. 创建模块

创建一个用户模块 user.module.ts,使用TypeOrmModule.forFeature([User])这样server中才可以使用@InjectRepository(User)注入`:

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])],
  providers: [UserService],
  controllers: [UserController],
})
export class UserModule {}

7. 测试

启动应用并测试 CRUD 操作:

npm run start

使用 Postman 或其他 API 测试工具进行测试。

方法解释

  • 创建用户 (create):接收一个 CreateUserDto 对象,创建一个新的 User 实体并保存到数据库。
  • 获取所有用户 (findAll):从数据库中查询所有用户。
  • 根据ID获取用户 (findOne):根据提供的用户ID从数据库中查询用户。
  • 更新用户 (update):根据提供的用户ID更新用户信息。
  • 删除用户 (remove):根据提供的用户ID从数据库中删除用户。

以上步骤涵盖了在 NestJS 中使用 TypeORM 进行基本的 CRUD 操作的详细过程。

最后修改:2024 年 11 月 26 日
如果觉得我的文章对你有用,请随意赞赏