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

目录
相关文章
|
5月前
|
存储 关系型数据库 MySQL
NestJS 配置 TypeORM 进阶教程
本文介绍了在 NestJS 项目中配置 TypeORM 的三种方式:初级阶段直接在 AppModule 中配置;进阶阶段抽离出独立的 DatabaseModule;进一步使用自定义命名空间将数据库配置分离到单独文件,提升可维护性与模块化程度。
282 3
|
JSON 数据格式
Nestjs(三)接收参数 @Query @Body @Param(post、get 、put、delete ...)
Nestjs(三)接收参数 @Query @Body @Param(post、get 、put、delete ...)
904 4
|
安全 网络安全 数据安全/隐私保护
网络ACL
网络ACL 网络ACL(Access Control List)是一种网络安全机制,用于控制网络中数据流的进出和传递。它基于规则列表,定义了允许或拒绝通过网络设备(如路由器、防火墙)的数据流。 网络ACL通常用于限制或过滤特定类型的流量,以实现对网络资源和服务的保护和管理。它可以根据不同的条件对数据流进行过滤,如源IP地址、目标IP地址、源端口、目标端口、协议类型等。 下面是网络ACL的一些常见应用场景和功能: 1. 访问控制:网络ACL可以设置规则,限制特定IP地址或子网访问某些网络资源。例如,可以设置拒绝来自某个IP地址的所有入站流量,或者只允许特定子网的流量通过。
1004 0
|
Web App开发 应用服务中间件 nginx
|
11月前
|
机器学习/深度学习 数据采集 人工智能
基于Huffman树的层次化Softmax:面向大规模神经网络的高效概率计算方法
层次化Softmax算法通过引入Huffman树结构,将传统Softmax的计算复杂度从线性降至对数级别,显著提升了大规模词汇表的训练效率。该算法不仅优化了计算效率,还在处理大规模离散分布问题上提供了新的思路。文章详细介绍了Huffman树的构建、节点编码、概率计算及基于Gensim的实现方法,并讨论了工程实现中的优化策略与应用实践。
279 15
基于Huffman树的层次化Softmax:面向大规模神经网络的高效概率计算方法
|
11月前
|
人工智能 数据可视化 前端开发
低代码开发平台哪些好用?推荐这六款!
低代码开发平台通过可视化拖放方式简化编程,适合技术人员和业务专家。本文推荐六款平台:织信、明道云、IVX、轻流、伙伴云、搭搭云。各平台特色如下:1. **织信**:企业级性能,支持多场景应用,AI深度融合,自动化蓝图。2. **明道云**:零代码构建,超自动化引擎,多端可用,开放性设计。3. **IVX**:全栈代码生成,多语言支持,可视化编程,跨平台兼容。4. **轻流**:强大表单引擎,流程引擎,Q-Robot业务机器人,数据分析。5. **伙伴云**:云表格Pro,项目协作,丰富的行业模板,强大的数据处理。6. **搭搭云**:功能全面,个性化定制,移动端免开发,快速响应业务变化。
|
11月前
|
消息中间件 存储 负载均衡
2024消息队列“四大天王”:Rabbit、Rocket、Kafka、Pulsar巅峰对决
本文对比了 RabbitMQ、RocketMQ、Kafka 和 Pulsar 四种消息队列系统,涵盖架构、性能、可用性和适用场景。RabbitMQ 以灵活路由和可靠性著称;RocketMQ 支持高可用和顺序消息;Kafka 专为高吞吐量和低延迟设计;Pulsar 提供多租户支持和高可扩展性。性能方面,吞吐量从高到低依次为
3890 1
|
JavaScript Shell API
FastAPI是什么?
FastAPI是一个现代、高性能的Python Web框架,专为构建API设计。它利用标准的Python类型提示,支持同步及异步编程,并借助Pydantic实现数据验证。FastAPI以卓越的性能媲美Node.js和Go,代码简洁优雅,能自动生成交互式API文档如Swagger UI和ReDoc,方便测试和调试。其对`async`和`await`的支持使之适用于WebSocket等高并发场景。快速上手仅需安装FastAPI和Uvicorn,编写少量代码即可启动服务并访问自动生成的文档界面。FastAPI不仅易于入门,还支持复杂的功能如依赖注入和后台任务,非常适合追求高性能和快速开发的项目。
713 1
|
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可能遇到的版本冲突问题
|
Shell Linux Python
python执行linux系统命令的几种方法(python3经典编程案例)
文章介绍了多种使用Python执行Linux系统命令的方法,包括使用os模块的不同函数以及subprocess模块来调用shell命令并处理其输出。
592 0

热门文章

最新文章

下一篇
oss云网关配置