在 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 操作的详细过程。