乐闻世界logo
搜索文章和话题

How to use in-memory database with TypeORM in Nest

4 个月前提问
3 个月前修改
浏览次数94

1个答案

1

NestJS 中使用 TypeORM 内存数据库,主要是为了在开发过程中进行快速原型开发或者用于测试时不希望持久化数据到真实数据库。以下是使用 TypeORM 内存数据库的步骤:

  1. 安装依赖:首先,确保你已经安装了 NestJS 相关的 TypeORM 包,以及数据库驱动。对于内存数据库,我们通常使用 sqlite3,因为它可以很容易地在内存中运行。
bash
npm install @nestjs/typeorm typeorm sqlite3
  1. 配置 TypeORM:在你的 app.module.ts 或者相应的模块配置中,你需要设置 TypeORM 以使用 SQLite 的内存数据库。这里是一个配置的例子:
typescript
import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; @Module({ imports: [ TypeOrmModule.forRoot({ type: 'sqlite', database: ':memory:', // 指定数据库为内存数据库 entities: [/* 你的实体类位置 */], synchronize: true, // 注意:仅在开发环境中使用 }), // ... 其他模块 ], }) export class AppModule {}

在这个配置中:

  • type 设置为 sqlite,因为我们使用 SQLite 作为我们的内存数据库。
  • database 设置为 :memory:,这告诉 SQLite 创建一个内存数据库。
  • entities 数组应该包含你的应用程序中所有的实体类。
  • synchronize 设置为 true,这将使得 TypeORM 在每次应用程序启动时自动创建数据库表。这是非常方便的,但应该只在开发环境中使用,因为它可能导致生产数据丢失。
  1. 定义实体:在你的应用中创建实体,这些实体将映射到数据库中的表。例如:
typescript
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'; @Entity() export class User { @PrimaryGeneratedColumn() id: number; @Column() name: string; @Column() email: string; }
  1. 使用 Repository 进行操作:在你的服务中,你可以注入这些实体的仓库(Repository),并使用这些仓库进行数据的增删改查操作。例如:
typescript
import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { User } from './user.entity'; @Injectable() export class UserService { constructor( @InjectRepository(User) private userRepository: Repository<User>, ) {} findAll(): Promise<User[]> { return this.userRepository.find(); } // ... 其他增删改查方法 }

使用内存数据库进行测试时,你的数据在每次应用程序重新启动时都会丢失,这对于某些类型的测试是非常有用的,因为它保证了测试的隔离性。

以上是在 NestJS 中使用 TypeORM 配置内存数据库的一般步骤。这让你能够快速开始开发和测试,而无需担心影响持久化的数据存储。

2024年6月29日 12:07 回复

你的答案