如何使用 NestJS 和 TypeORM 转换输入数据

     2023-03-10     108

关键词:

【中文标题】如何使用 NestJS 和 TypeORM 转换输入数据【英文标题】:How to transform input data with NestJS and TypeORM 【发布时间】:2019-11-08 08:07:05 【问题描述】:

我想创建可以在传入数据到达数据库之前对其进行转换的功能。假设我们要确保在创建新用户时,firstName 和 lastName 属性值始终以大写字母开头。或者另一个很好的例子是防止登录问题并始终以小写字母存储电子邮件地址。

我查看了 NestJS 的管道文档,但它太笼统了。我希望能够指定哪些字段需要转换,并且我不想为每个需要转换的属性或端点创建管道。

我还尝试了“class-transformer”包中的@Transform 装饰器,但这似乎不起作用。

export class UserRoleCreateDto 
  @IsDefined()
  @IsString()
  @IsNotEmpty()
  @Transform((name) => name.toUpperCase())
  readonly name;

预期的结果应该是大写字母的名称,但不是。

关于如何在 NestJS / TypeORM 进入数据库之前实现正确的输入转换的任何想法或示例?

感谢您的宝贵时间!

【问题讨论】:

【参考方案1】:

这是一个小的工作示例

  @UsePipes(new ValidationPipe(transform: true))
  @Get('test_input')
  async testInput(@Query() data: UserRoleCreateDto): Promise<any> 

    return data;
  

并签入 bash:

curl 'http://localhost:3060/test_input?name=hello'

"name":"HELLO"

检查您是否有ValidationPipe 装饰器,尤其是transform: true 选项,没有这些它就不起作用。 transform: true 自动将输入数据转换为类实例。

在 Nestjs 文档页面上了解更多关于验证的信息 - link

另外,为了以防万一,您可以使用 @Body() 来代替 @Query() 装饰器来处理 POST 数据或使用 @Param() 来处理 URL 参数

【讨论】:

【参考方案2】:

你也可以使用 TypeORM 的实体监听器。

@BeforeInsert

您可以在实体中定义具有任何名称的方法并用@BeforeInsert 标记它,TypeORM 将在使用存储库/管理器保存插入实体之前调用它。

@Entity()
export class User 
    
    @BeforeInsert()
    nameToUpperCase() 
        this.email = this.email.toLowerCase()
        this.name = this.name.toUpperCase();
    

来源here

【讨论】:

如何在带有typeorm的nestjs项目中使用外部实体?

】如何在带有typeorm的nestjs项目中使用外部实体?【英文标题】:Howuseexternalentitiesinnestjsprojectwithtypeorm?【发布时间】:2019-06-0405:48:10【问题描述】:我正在尝试使用在项目之外定义的类型orm实体。也就是说,我有两个项目:models... 查看详情

使用 TypeORM 和 Nestjs 进行测试的过程,以及使用 mocks 的玩笑?

】使用TypeORM和Nestjs进行测试的过程,以及使用mocks的玩笑?【英文标题】:ProcessoftestingwithTypeORMandNestjs,andjestusingmocks?【发布时间】:2019-03-1818:13:36【问题描述】:这个问题很可能被概括为服务中的存根存储库以及如何在这个问... 查看详情

如何在 NestJs 中捕获 Typeorm 事务错误

】如何在NestJs中捕获Typeorm事务错误【英文标题】:HowtocatchaTypeormtransactionerrorinNestJs【发布时间】:2019-11-2502:46:27【问题描述】:我有一个用node.js和nestJs编写的服务器端,用typeorm查询。我正在尝试使用here建议的事务将一些查询... 查看详情

如何从控制器 JSON 返回的实体字段中排除。 NestJS + Typeorm

】如何从控制器JSON返回的实体字段中排除。NestJS+Typeorm【英文标题】:HowtoexcludeentityfieldfromreturnedbycontrollerJSON.NestJS+Typeorm【发布时间】:2018-10-2520:55:23【问题描述】:我想从返回的JSON中排除密码字段。我正在使用NestJS和Typeorm。t... 查看详情

如何使用 typeORM 在 Nestjs 中创建类型为 Date 的列并键入 DateTime?

】如何使用typeORM在Nestjs中创建类型为Date的列并键入DateTime?【英文标题】:HowcanIcreatecolumnswithtypeDateandtypeDateTimeinnestjswithtypeORM?【发布时间】:2020-10-2301:40:11【问题描述】:我是Nestjs的新手。如何设置接受日期格式和日期时间格... 查看详情

如何使用 typeorm nestjs 加入 3 个关系表

】如何使用typeormnestjs加入3个关系表【英文标题】:Howtojoin3relationtableusingtypeormnestjs【发布时间】:2021-08-0415:46:15【问题描述】:我正在将typeorm与NestJs一起使用,我尝试加入3个关系但收到错误pathcomment.userinentitywasnotfound这是我的... 查看详情

使用 NestJS 和 TypeORM 为项目生成迁移文件

】使用NestJS和TypeORM为项目生成迁移文件【英文标题】:GeneratingmigrationfileforaprojectusingNestJSandTypeORM【发布时间】:2020-12-3002:01:21【问题描述】:我正在尝试为我的实体生成迁移文件,但是每当我运行创建实体的命令时,它都会创... 查看详情

如何使用返回多个项目的 TypeORM 设置 Nestjs 查询?

】如何使用返回多个项目的TypeORM设置Nestjs查询?【英文标题】:HowToSetupANestjsQueryWithTypeORMThatReturnsMultipleItems?【发布时间】:2018-11-1123:38:04【问题描述】:我从Angular发送这个URL:http://localhost:3000/api/skills?category_id=2问题是,如何... 查看详情

使用 TypeORM 和 NestJs 和 Typescript 创建新迁移时出错 [关闭]

】使用TypeORM和NestJs和Typescript创建新迁移时出错[关闭]【英文标题】:ErrorwhencreatinganewmigrationusingTypeORMandNestJswithTypescript[closed]【发布时间】:2020-12-2910:54:08【问题描述】:我有一个使用typescript的节点应用程序,我正在尝试按照Typ... 查看详情

使用 NestJS 和 TypeOrm,在我运行 NestJS 应用程序后不会自动创建表

】使用NestJS和TypeOrm,在我运行NestJS应用程序后不会自动创建表【英文标题】:UsingNestJSandTypeOrm,thetablesarenotbeingcreatedautomaticallyafterIruntheNestJSapplication【发布时间】:2019-12-2704:19:08【问题描述】:使用postgres数据库,我能够连接到... 查看详情

如何以正确的方式将@admin-bro/nestjs 与@admin-bro/typeorm 和postgres 一起使用?

】如何以正确的方式将@admin-bro/nestjs与@admin-bro/typeorm和postgres一起使用?【英文标题】:Howtouse@admin-bro/nestjswith@admin-bro/typeormandpostgresinarightway?【发布时间】:2021-05-2404:04:12【问题描述】:admin-bro-nestjs存储库包含一个综合示例,其... 查看详情

如何在 Nestjs 中使用 .env 文件设置 Typeorm 的配置

】如何在Nestjs中使用.env文件设置Typeorm的配置【英文标题】:HowtosetupconfigurationofTypeORMwith.envfileinNest.JS【发布时间】:2020-09-2217:48:22【问题描述】:我想用.env文件设置TypeORM的配置,但是当我尝试运行迁移脚本时遇到问题。我做了... 查看详情

使用 NestJS、TypeORM、GraphQL 更新具有实体之间关系的 PSQL 表

】使用NestJS、TypeORM、GraphQL更新具有实体之间关系的PSQL表【英文标题】:UpdatingPSQLTableswithRelationshipsbetweenEntitiesUsingNestJS,TypeORM,GraphQL【发布时间】:2021-06-0215:46:05【问题描述】:我已经为创建新表和更新后端的TypeORM实体苦苦挣扎... 查看详情

Nestjs中使用TypeORM的重复列名

】Nestjs中使用TypeORM的重复列名【英文标题】:DuplicatecolumnnamewithTypeORMinNestjs【发布时间】:2021-01-1621:13:57【问题描述】:我们有2个实体:EstateIntegrationEntity和EstateEntity当我们尝试在estateIntegrationRepository上使用.findOne时,我们会收... 查看详情

未找到连接“默认”-TypeORM、NestJS 和外部 NPM 包

】未找到连接“默认”-TypeORM、NestJS和外部NPM包【英文标题】:Connection"default"wasnotfound-TypeORM,NestJSandexternalNPMPackage【发布时间】:2019-09-0820:14:04【问题描述】:我正在使用NestJs创建几个应用程序,我想将代码从NestInterceptor... 查看详情

播种时NestJS中的TypeOrm:RepositoryNotFoundError

】播种时NestJS中的TypeOrm:RepositoryNotFoundError【英文标题】:TypeOrm:RepositoryNotFoundErrorinNestJSwhileseeding【发布时间】:2020-07-1001:10:23【问题描述】:我正在尝试使用NestJS和TypeORM为我的数据库播种。我有一个创建exercise表的迁移文件和... 查看详情

NestJS/TypeORM。 TypeORM 不更新数据库中的实体,而是使用旧的缓存实体

】NestJS/TypeORM。TypeORM不更新数据库中的实体,而是使用旧的缓存实体【英文标题】:NestJS/TypeORM.TypeORMdoesn\'tupdateentityinDB,usesoldcachedentityinstead【发布时间】:2021-06-0503:49:24【问题描述】:我整天都在尝试将实体保存到MySQL数据库中... 查看详情

错误:使用 Nestjs + Graphql + Typeorm 时无法确定 GraphQL 输入类型

】错误:使用Nestjs+Graphql+Typeorm时无法确定GraphQL输入类型【英文标题】:Error:CannotdetermineaGraphQLinputtype,whileusingNestjs+Graphql+Typeorm【发布时间】:2021-02-2012:02:32【问题描述】:我正在使用Nestjs、Graphql和Typeorm,而且我是新手。我目前... 查看详情