首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何向TypeORM实体注入NestJS配置?

在NestJS中使用TypeORM时,可以通过使用自定义装饰器和依赖注入来向实体注入NestJS配置。以下是一种实现方式:

首先,创建一个自定义装饰器InjectConfig,用于标记需要注入配置的实体类。在inject-config.decorator.ts文件中编写以下代码:

代码语言:txt
复制
import { SetMetadata } from '@nestjs/common';

export const InjectConfig = (configKey: string) => SetMetadata('configKey', configKey);

然后,在实体类中使用InjectConfig装饰器来标记需要注入配置的属性。例如,在user.entity.ts文件中的User实体类中,我们想要注入一个名为database的配置,可以这样写:

代码语言:txt
复制
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
import { InjectConfig } from './inject-config.decorator';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @InjectConfig('database')
  @Column()
  database: string;
}

接下来,创建一个自定义的TypeORM连接选项提供者TypeOrmConfigProvider,用于获取NestJS配置中的TypeORM配置。在typeorm-config.provider.ts文件中编写以下代码:

代码语言:txt
复制
import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { TypeOrmModuleOptions, TypeOrmOptionsFactory } from '@nestjs/typeorm';

@Injectable()
export class TypeOrmConfigProvider implements TypeOrmOptionsFactory {
  constructor(private readonly configService: ConfigService) {}

  createTypeOrmOptions(): TypeOrmModuleOptions {
    return {
      type: 'mysql',
      host: this.configService.get('database.host'),
      port: this.configService.get('database.port'),
      username: this.configService.get('database.username'),
      password: this.configService.get('database.password'),
      database: this.configService.get('database.name'),
      entities: [__dirname + '/../**/*.entity{.ts,.js}'],
      synchronize: true,
    };
  }
}

在上述代码中,我们使用ConfigService来获取NestJS配置中的数据库相关配置。

最后,在NestJS的模块中,将TypeOrmConfigProvider添加到TypeOrmModule.forRoot()providers数组中,并在TypeOrmModule.forRoot()imports中引入ConfigModule。例如,在app.module.ts文件中的AppModule模块中,可以这样写:

代码语言:txt
复制
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { TypeOrmConfigProvider } from './typeorm-config.provider';
import { User } from './user.entity';

@Module({
  imports: [
    ConfigModule.forRoot(),
    TypeOrmModule.forRootAsync({
      useClass: TypeOrmConfigProvider,
    }),
    TypeOrmModule.forFeature([User]),
  ],
})
export class AppModule {}

通过以上步骤,我们成功地向TypeORM实体注入了NestJS配置。在User实体类中,我们使用了InjectConfig装饰器来标记需要注入的配置属性,并在TypeOrmConfigProvider中获取NestJS配置中的TypeORM配置。

请注意,以上代码中的database配置仅作为示例,你可以根据实际需求修改和扩展。

关于TypeORM和NestJS的更多详细信息和用法,请参考以下链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 精读《Nestjs

    精读 《Nestjs 文档》 本期精读的文章是:Nestjs 文档 体验一下 nodejs mvc 框架的优雅设计。...2.3 模块间依赖注入 Modules, Controllers, Components 之间通过依赖注入相互关联,它们通过同名的 @Module @Controller @Component 装饰器申明...3.1.1 定义实体 每个实体对应数据库的一张表,Typeorm 在每次启动都会同步表结构到数据库,我们完全不用使用数据库查看表结构,所有结构信息都定义在代码中: @Entity() export class...3.1.2 自动校验 光判断参数类型是不够的,我们可以使用 class-validator 做任何形式的校验: @Column({ comment: '配置 JSON', length: 5000,...,需要校验所有字段,但更新实体时,由于性能需要,我们一般不会一次查询所有字段,就需要指定更新时,不校验没有赋值的字段,我们通过 Typeorm 的 EventSubscriber 完成数据库操作前的代码校验

    4K20

    使用NestJs、GraphQL、TypeORM搭建后端服务

    可以理解为依赖注入。 他们的值都为一个数组,方便添加多个模块功能。...我们先来将TypeORM相关依赖添加到项目,依赖包括三部分,分别是NestJs支持TypeORM的依赖包@nestjs/typeormTypeORM本身typeorm,数据库支持MySQL。...image.png 3.2、改造app.module.ts 从@nestjs/typeorm中引入NestJsTypeORM连接模块*TypeOrmModule,然后传入一个Object作为与数据库链接的...现在保存文件,我们将会得到一个错误,因为TypeORM生成数据库表的时候至少需要一个实体Entity文件。...现在我们来src/modules/pokemon目录下创建实体文件pokemon.entity.ts。TypeORM的基本方法了解: Entity:实体装饰器,将一个类声明为一个实体

    6.6K10

    学完这篇 Nest.js 实战,还没入门的来锤我!(长文预警)

    操作数据库, 首先我们要安装以下依赖包: npm install @nestjs/typeorm typeorm mysql2 -S 官方提供了两种连接数据库的方法, 这里分别介绍一下: 方法1 首先在项目根目录下创建两个文件...官网查看 import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; @Module...CRUD 好了,接下来就进行数据操作,前面我们说通过代码来建表, TypeORM是通过实体映射到数据库表,所以我们先建立一个文章实体PostsEntity,在posts目录下创建posts.entity.ts...autoLoadEntities: true, }),] 自动加载我们的实体,每个通过forFeature()注册的实体都会自动添加到配置对象的entities数组中, forFeature()就是在某个...entities: ['dist/**/*.entity{.ts,.js}'], }),] 通过配置的路径, 自动去导入实体

    13.9K54

    有了 Prisma,就别用 TypeORM

    findOne(undefined) 所查询到的却是第一条记录​ 首先 TypeORM 有个天坑,你可以在 这个 Issue 中查看详情或查看 这篇文章 是如何破解使用 TypeORM 的 Node.js...userRepository: Repository 实体一多,要注入的 Repository 也就更多,无疑不是对开发者心智负担的加深。...然后在 service 上,注入 PrismaService 后,就可以通过 this.prisma[model] 来调用模型(实体) ,就像这样 import { Injectable } from...创建实体​ 在 TypeORM 中,假设你要创建一个 User 实体,你需要这么做 const newUser = new User() newUser.name = 'kuizuo' newUser.email...TypeORM 有种被 nestjs 深度绑定的模样,一提到 TypeORM,想必第一印象就是 Nestjs 中所用到的 ORM 框架。

    2K22

    学完这篇 Nest.js 实战,还没入门的来锤我!(长文预警)

    操作数据库, 首先我们要安装以下依赖包: npm install @nestjs/typeorm typeorm mysql2 -S 复制代码 官方提供了两种连接数据库的方法, 这里分别介绍一下: 方法...官网查看 import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; @Module...CRUD 好了,接下来就进行数据操作,前面我们说通过代码来建表, TypeORM是通过实体映射到数据库表,所以我们先建立一个文章实体PostsEntity,在posts目录下创建posts.entity.ts...autoLoadEntities: true, }),] 复制代码 自动加载我们的实体,每个通过forFeature()注册的实体都会自动添加到配置对象的entities数组中, forFeature(...entities: ['dist/**/*.entity{.ts,.js}'], }),] 复制代码 通过配置的路径, 自动去导入实体

    10.2K11

    TypeORM用法浅析

    本文以nestjs框架为例,nestjstypeorm有着紧密的集成,提供了开箱即用的@nestjs/typeorm,更方便地进行数据库的连接,实体管理和依赖注入,详细可查看文档Database。...有了@nestjs/typeorm的帮助,在service中进行数据操作变得更为便捷高效,主要集中在Repository和EntityManager两种API上。2....Repository注入每个实体都有自己的Repository存储库,当你要操作具体的某个实体的数据时,使用@injectRepository装饰器来注入对应实体的Repository,可以直接使用Repository...多表联查TypeORM官方文档中,实体关系实际上是通过mysql的外键实现的,先在entity实体代码上添加关系,再使用leftJoinAndSelect等进行关联查询。...参考开始入门 | TypeORM 中文文档Database | NestJS - A progressive Node.js framework做个图书借阅系统(2) 数据库设计深入探讨:为何避免使用外键与级联操作

    24021

    NestJS折腾记- (0) 开胃菜, TypeORM 连接远程的MySQL(ssh tunnel)及Linux信息过滤裁切基础

    其他就不多说了 官网 | NestJS迭代计划(roadmap) ---- 效果图 失败 失败的原因有那么几个; 数据库的配置信息跟实际要链接的数据库数据不一致(比如数据库名字,比如用户名密码) 隧道转发的端口给本地其他服务占用了...---- 代码 db.ts(src/config) 温馨提示: 若是要用__dirname,确保配置文件在根目录,否则请改用相对路径,不然会找不到实体 synchronize是同步,会自动同步到数据库,.../modules/users/users.module'; // 数据库ORM import { TypeOrmModule } from '@nestjs/typeorm'; import { MySqlConfig...timestamp') updated_at: number; // 是否启用 @Column('int') admin_status: number; } 复制代码 剩下的姿势,就在services里面注入实体和...orm的Repository; 再到controller注入服务调用即可...返回的是Promise ---- 要点提示及温馨提示 SSH隧道转发(SSH Tunnel) 远程数据库我们一般不暴露外接端口直连

    2K30

    Dotenv在nestjs中的使用

    nestjs中使用环境变量, 推荐使用官方提供的@nestjs/config,开箱即用: @nestjs/config依赖于dotenv,可以通过key=value形式配置环境变量,项目会默认加载根目录下的...首先安装对应npm包 配置环境变量文件 定义读取环境变量的函数 配置@nestjs/config的方法 首先安装@nestjs/config 配置环境变量文件,配置两个文件,一个用于开发环境,一个用于生产环境...@nestjs/config的方法 import { TypeOrmModule } from '@nestjs/typeorm'; import { ConfigService, ConfigModule...synchronize: true, //根据实体自动创建数据库表, 生产环境建议关闭 }), }), PostsModule, ], ... })...那么如何读取process.env呢?直接调用configService的get方法,get方法第一个参数是环境变量属性,第二个参数为默认值。

    17K42

    混搭 TypeScript + GraphQL + DI + Decorator 风格写 Node.js 应用

    但是可以初始化多个连接,比如用于多个数据库连接或读写分离 默认配置项 defaultOptions 中的 entities 表示数据库实体对象存放的路径,推荐专门创建一个 entity 目录用来存放:...其次,在 Midway 的配置文件中指定数据库连接配置: // src/config/config.default.ts export const typeorm = { type: 'mysql...(*.d|base){.js,.ts}`], } 说明: 因为要区分线上环境运行和本地开发,所以需要配置两份 entities的配置项本地和线上配置是不同的,本地直接用 src/entity 就行,...分页(Pagination) 功能为案例来演示在如何在 Midway 框架里使用 GraphQL,以及如何应用上述这些装饰器 。...小结 距离上次写 Node.js 后台应用有段时间了,当时的技术栈和现在的没法比,现在尤其得益于使用 Decorator(装饰器语法) + DI(依赖注入)风格写业务逻辑,再搭配使用 typeorm

    3.3K20
    领券