NestJS中TypeORM的使用

简介: 本文介绍了在 NestJS 中使用 TypeORM 实现数据库的 CRUD 操作,涵盖依赖安装、模块配置、实体定义、服务逻辑、控制器路由及 API 测试等步骤。

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

目录
相关文章
|
4月前
|
存储 关系型数据库 MySQL
NestJS 配置 TypeORM 进阶教程
本文介绍了在 NestJS 项目中配置 TypeORM 的三种方式:初级阶段直接在 AppModule 中配置;进阶阶段抽离出独立的 DatabaseModule;进一步使用自定义命名空间将数据库配置分离到单独文件,提升可维护性与模块化程度。
203 3
|
JSON 数据格式
Nestjs(三)接收参数 @Query @Body @Param(post、get 、put、delete ...)
Nestjs(三)接收参数 @Query @Body @Param(post、get 、put、delete ...)
858 4
|
安全 网络安全 数据安全/隐私保护
网络ACL
网络ACL 网络ACL(Access Control List)是一种网络安全机制,用于控制网络中数据流的进出和传递。它基于规则列表,定义了允许或拒绝通过网络设备(如路由器、防火墙)的数据流。 网络ACL通常用于限制或过滤特定类型的流量,以实现对网络资源和服务的保护和管理。它可以根据不同的条件对数据流进行过滤,如源IP地址、目标IP地址、源端口、目标端口、协议类型等。 下面是网络ACL的一些常见应用场景和功能: 1. 访问控制:网络ACL可以设置规则,限制特定IP地址或子网访问某些网络资源。例如,可以设置拒绝来自某个IP地址的所有入站流量,或者只允许特定子网的流量通过。
953 0
|
资源调度 前端开发 API
Kiwi-国际化全流程解决方案
目前有很多成熟的库可以帮助前端去做对应的国际化方案,比较知名的有 react-intl 以及 I18N-loader。这些库都可以很好的解决代码中多种语言切换的问题
Kiwi-国际化全流程解决方案
|
1月前
|
人工智能 监控 测试技术
告别只会写提示词:构建生产级LLM系统的完整架构图​
本文系统梳理了从提示词到生产级LLM产品的八大核心能力:提示词工程、上下文工程、微调、RAG、智能体开发、部署、优化与可观测性,助你构建可落地、可迭代的AI产品体系。
359 51
|
前端开发
进来!手把手教用css动画写loading效果
进来!手把手教用css动画写loading效果
|
JavaScript
成功解决node、node-sass和sass-loader版本冲突问题、不需要降低node版本。如何在vue项目中安装node-sass,以及安装node-sass可能遇到的版本冲突问题
这篇文章介绍了在Vue项目中安装node-sass和sass-loader时遇到的版本冲突问题,并提供了解决这些问题的方法,包括在不降低node版本的情况下成功安装node-sass。
成功解决node、node-sass和sass-loader版本冲突问题、不需要降低node版本。如何在vue项目中安装node-sass,以及安装node-sass可能遇到的版本冲突问题
|
机器学习/深度学习 数据可视化 大数据
K值进行交叉验证
8月更文挑战第16天
|
前端开发 容器
【CSS进阶】使用CSS gradient制作绚丽渐变纹理背景效果(上)
【CSS进阶】使用CSS gradient制作绚丽渐变纹理背景效果
483 1
|
存储 监控 测试技术
如果做好一位需求分析师
如果做好一位需求分析师
329 0

热门文章

最新文章