【问题标题】:Date processing in NestJSNestJS 中的日期处理
【发布时间】:2023-03-22 18:02:01
【问题描述】:

我的 NestJS API 正在返回格式为 'YYYY-mm-dd' 的字符串,我希望它的格式类似于 'dd-mm-YYYY' 或日期对象(如果可能)。

NestJS 也无法识别 Angular 何时发送日期。我需要以特定方式将其作为字符串发送还是 Nest 可以转换它?

我正在寻找一段时间的答案和文档,但没有找到任何

我的实体是这样的:

export class Example {
  @PrimaryGeneratedColumn()
  id: number;

  @Column('date', { nullable: true })
  date: Date;
}

API返回的结果如下:

[
  {
    'id': '1',
    'date': '2020-06-25'
  }
]

【问题讨论】:

  • 如果您觉得我的回答有帮助,请告诉我...谢谢'

标签: angular nestjs typeorm


【解决方案1】:

序列化
Nest 提供了一个内置功能来帮助确保这些操作可以以直接的方式执行。 ClassSerializerInterceptor 拦截器使用强大的Class-transformer 包来提供转换对象的声明性和可扩展方式。它执行的基本操作是获取方法处理程序返回的值并应用来自class-transformerclassToPlain() 函数。这样做时,它可以将由类转换器装饰器表达的规则应用于实体/DTO 类,如下所述。

变换
您可以使用 @Transform() 装饰器执行其他数据转换。
例如,以下构造返回 RoleEntity 的 name 属性,而不是返回整个对象。
@Transform(role => role.name)
role: RoleEntity;

(from Nest.js Documentation)

您可以按如下方式修改您的代码:

import { Transform } from 'class-transformer';

export class Example {
  @PrimaryGeneratedColumn()
  id: number;

  @Transform(x => new Date(x))
  @Column('text')
  date: Date;
}

或者:

import { Type } from 'class-transformer';

export class Example {
  @PrimaryGeneratedColumn()
  id: number;

  @Type(() => Date)
  @Column('text')
  date: Date;
}

作为最佳实践,请考虑让您的 Angular 应用以Date 类型发送日期,然后将其作为Date 存储在数据库中。

【讨论】:

    猜你喜欢
    • 2021-01-06
    • 1970-01-01
    • 2022-08-08
    • 2011-08-15
    • 2020-09-11
    • 1970-01-01
    • 2015-11-28
    相关资源
    最近更新 更多