如何使用 NestJS 序列化返回 id 字符串而不是 _bsontype

Posted

技术标签:

【中文标题】如何使用 NestJS 序列化返回 id 字符串而不是 _bsontype【英文标题】:How do I return an id string instead of a _bsontype with NestJS Serialization 【发布时间】:2019-07-13 15:53:33 【问题描述】:

使用时

@UseInterceptors(ClassSerializerInterceptor)

就像文档here中解释的那样

我得到了想要的过滤结果,但是在使用 mongodb 时,id 被格式化为_bsontype,而不是像以前那样没有拦截器的普通string


    "id": 
        "_bsontype": "ObjectID",
        "id": 
            "0": 92,
            "1": 108,
            "2": 182,
            "3": 85,
            "4": 185,
            "5": 20,
            "6": 221,
            "7": 12,
            "8": 56,
            "9": 66,
            "10": 131,
            "11": 172
        
    ,
    "createdAt": "2019-02-20T02:07:17.895Z",
    "updatedAt": "2019-02-20T02:07:17.895Z",
    "firstName": "The First Name",
    "lastName": "The Last Name",
    "email": "giberish@gmail.com"

如何将它转换回像这样的普通 id 字符串?


    "id": "5c6cb655b914dd0c384283ac",
    "createdAt": "2019-02-20T02:07:17.895Z",
    "updatedAt": "2019-02-20T02:07:17.895Z",
    "firstName": "The First Name",
    "lastName": "The Last Name",
    "email": "giberish@gmail.com"
    "password": "okthen"

【问题讨论】:

直接将链接中的相关重现步骤提升到您的问题中可能会有所帮助。 【参考方案1】:

您可以使用 class-transformer 的 @Transform() 和选项 toPlainOnly

import  Transform  from 'class-transformer';

@Entity()
export class User 
  @ObjectIdColumn()
  @Transform((value) => value.toString(),  toPlainOnly: true )
  _id: ObjectID;

ClassSerializerInterceptor 内部使用类转换器的classToPlain() 方法。

【讨论】:

以上是关于如何使用 NestJS 序列化返回 id 字符串而不是 _bsontype的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 nestjs/swagger 更改查询参数序列化?

NestJS - 控制器 - Get(':id') 返回 404

NestJS + Mongoose:如何测试 document(data).save()?

您可以在 Angular / NestJS 模块提供程序中使用 `useFactory` 属性并返回一个类而不是实例吗?

如何使用 NestJS 将纯文本作为我的请求正文传递?

NestJS:返回一个字符串