用于 rest api 的 typegoose/mongoose 日期格式

Posted

技术标签:

【中文标题】用于 rest api 的 typegoose/mongoose 日期格式【英文标题】:typegoose/mongoose date format for rest api 【发布时间】:2020-01-22 22:26:09 【问题描述】:

我正在为与 mongodb 耦合的服务器使用 typescript。

我正在使用 openapi 文件严格定义输出。

对于猫鼬,我非常熟悉定义日期,例如:

  birthday: Date;

现在使用 Typegoose:

  @prop()
  birthday: Date;

到目前为止一切顺利,除非我需要从我的快速打字稿服务器输出,例如:

  public async generateLoginTokensAndHttpResponse (userDoc: User, req: any): Promise<Login> 
    const renewalToken = JwtService.generateRenewalToken(userDoc);
    await JwtRepository.createNewJwt(userDoc._id, renewalToken, req.clientIp, req.headers['user-agent']);
    return 
      tokenAccess: 
        value: JwtService.generateAccessToken(userDoc),
      ,
      tokenRenewal: 
        value: renewalToken,
      ,
      user: userDoc,
    ;
  

“登录”界面如下所示(基于 swagger 定义生成):

export default interface Login 
  user: 
    verified: boolean;
    email: string;
    firstName: string;
    lastName: string;
    username: string;
    captchaLocked: boolean;
    birthday?: string;
  ;
  tokenAccess:  value: string ;
  tokenRenewal:  value: string ;


如果我将 birthday?: string; 更改为 birthday?: Date; 就可以了,但这会破坏 swagger 定义的预期输出:

type: string
format: date-time

迭代所有对象调用函数将所有日期对象转换为日期时间字符串会很昂贵..

这里的最佳做法是什么?

【问题讨论】:

【参考方案1】:

我建议使用JSON.stringify / JSON.parse,它将日期从字符串转换为字符串

【讨论】:

应用程序在哪里?有没有办法在不影响性能的情况下自动执行此操作? 当你使用“nestjs”时,你可以使用转换器,如果你使用“type-/graphql”突变,如果你使用普通的“express”,你可以使用“middleware”,关于性能 - 抱歉我不知道

以上是关于用于 rest api 的 typegoose/mongoose 日期格式的主要内容,如果未能解决你的问题,请参考以下文章

php 用于WordPress的SAAS REST API

用于重启设备的 Airwatch Rest API

用于检索对象集基数的 REST API

用于文件下载的Camel rest API

用于系统通知的 Quickblox REST API

用于POST api请求和响应对象建模的RESTful api最佳实践