NestJS 中的日期处理

Fel*_*lin 2 typeorm angular nestjs

我的 NestJS API 返回格式为“YYYY-mm-dd”的字符串,我希望它的格式类似于“dd-mm-YYYY”,或者如果可能的话返回日期对象。

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

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

我的实体是这样的:

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

  @Column('date', { nullable: true })
  date: Date;
}
Run Code Online (Sandbox Code Playgroud)

API返回的结果是这样的:

[
  {
    'id': '1',
    'date': '2020-06-25'
  }
]
Run Code Online (Sandbox Code Playgroud)

Raf*_*nig 7

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

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

来自 Nest.js 文档

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

import { Transform } from 'class-transformer';

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

  @Transform(x => new Date(x))
  @Column('text')
  date: Date;
}
Run Code Online (Sandbox Code Playgroud)

或者:

import { Type } from 'class-transformer';

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

  @Type(() => Date)
  @Column('text')
  date: Date;
}
Run Code Online (Sandbox Code Playgroud)

作为最佳实践,请考虑让 Angular 应用程序将日期作为Date类型发送,然后将其作为Date.