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

NestJS 如何在配置中注入 TypeORM 实体?

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

1个答案

1

NestJS 提供了一个模块化的系统,允许开发者将不同的组件、服务等组织成模块。在 NestJS 中,使用 TypeORM 时通常会创建一个模块专门用于数据库配置和实体的注册。以下是如何在 NestJS 中配置 TypeORM 并注入实体的步骤:

第一步:安装必要的包

首先,你需要安装 TypeORM 和 NestJS 对应的 TypeORM 模块,还有数据库驱动。例如,如果你使用的是 PostgreSQL,你需要安装 pg 包。

bash
npm install --save @nestjs/typeorm typeorm pg

第二步:创建 TypeORM 实体

实体是数据库中表的映射。你需要定义实体来表示你的数据。例如:

typescript
// cat.entity.ts import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; @Entity() export class Cat { @PrimaryGeneratedColumn() id: number; @Column() name: string; @Column() age: number; @Column() breed: string; }

第三步:设置 TypeORM 模块

在你的应用模块中,你需要导入 TypeOrmModule 并在根模块或者特定的功能模块中进行配置。配置 TypeORM 可以通过硬编码方式,也可以通过异步方式使用配置服务动态加载。

以下是硬编码配置的示例:

typescript
// app.module.ts import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { CatsModule } from './cats/cats.module'; import { Cat } from './cats/cat.entity'; @Module({ imports: [ TypeOrmModule.forRoot({ type: 'postgres', host: 'localhost', port: 5432, username: 'test', password: 'test', database: 'test', entities: [Cat], synchronize: true, // 注意:在生产环境中不应使用synchronize }), CatsModule, ], controllers: [], providers: [], }) export class AppModule {}

第四步:在功能模块中注入实体

一旦在全局配置了 TypeORM,就可以在功能模块中通过 TypeOrmModule.forFeature() 方法来注入实体。例如,在一个处理猫咪数据的模块中,你可以这样做:

typescript
// cats.module.ts import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { CatsService } from './cats.service'; import { CatsController } from './cats.controller'; import { Cat } from './cat.entity'; @Module({ imports: [TypeOrmModule.forFeature([Cat])], controllers: [CatsController], providers: [CatsService], }) export class CatsModule {}

在模块中通过 forFeature() 方法注册实体后,就可以在该模块的服务中通过依赖注入使用这些实体了。例如:

typescript
// cats.service.ts import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Cat } from './cat.entity'; @Injectable() export class CatsService { constructor( @InjectRepository(Cat) private catsRepository: Repository<Cat>, ) {} findAll(): Promise<Cat[]> { return this.catsRepository.find(); } // 其他增删改查等方法... }

这样,就完成了在 NestJS 中配置 TypeORM 并注入实体的步骤。所有数据库相关操作都可以通过相应的repository来完成,并能体现出 NestJS 框架的模块化和依赖注入的优势。

2024年6月29日 12:07 回复

你的答案