typescript TSeD为1个属性声明模型多类型的正确方法

xdnvmnnf  于 2023-03-13  发布在  TypeScript
关注(0)|答案(1)|浏览(95)

所以我有一个例子,我想保存一个对象作为一个json字符串到数据库
但是每次都出现错误和警告,因为模型不是设置为字符串就是设置为对象
我需要两个不同的模型来发布和获取吗?或者有更优雅的方法来处理这类问题?
这就是我现在的编码方式

@Get("/")
  @Summary("Return List Of blogs")
  @Returns(200, Array)
  async getAll(@QueryParams() blogFilter: any) {

    return await this.service.findMany(blogFilter)
  }

  @Post("/")
  @Summary("Create New Blog")
  @Returns(201, BlogModel)
  async create(@BodyParams() @Groups("creation") blog: BlogModel): Promise<BlogModel> {

    // @ts-ignore
    blog.content = JSON.stringify(await this.mediaService.contentMediaConvert(blog.content));

    return await this.service.create(blog);
  }

博客内容应该是前端的一个对象,但保存为JSON字符串以节省空间
这是我现在的模型

export class BlogModel {
  @ObjectID("id")
  _id: string;

  @Property()
  @Required()
  @Lowercase()
  title: string;

  @Property()
  @Lowercase()
  slug: string;

  @Property()
  @Any()
  content: object;

  @Property()
  @Ref(CategoryModel)
  category: Ref<CategoryModel>

  @Property()
  @Default(0)
  views: number;

  @Property()
  @Required()
  @Ref(UserModel)
  createdBy: Ref<UserModel>;

  @Property()
  @Required()
  @Ref(MediaModel)
  thumbnail: Ref<MediaModel>;

  @Property()
  @Default("BLOG")
  @Enum(pageType)
  pageType: pageType

}

我不擅长面向对象抱歉

5kgi1eie

5kgi1eie1#

这个问题不够清楚,不能理解这个问题。如果你能把错误信息和服务界面也贴出来会有帮助。但是我可以对我所看到的发表一些评论。
我需要两种不同的模型来发布和获取吗
不,这不是必需的。您可以使用一个模型进行POST和GET。

// @ts-ignore
blog.content = JSON.stringify(await this.mediaService.contentMediaConvert(blog.content));

return await this.service.create(blog);

问题可能来自JSON.stringifyservice.create很可能使用Object而不是string作为参数。因此,在理想情况下,这应该是this.service.create(await this.mediaService.contentMediaConvert(blog.content))
其他一些与您的问题无关的评论:

  1. @QueryParams() blogFilter: any。不要使用any,尝试定义类似class BlogFilterQuery的内容
    1.在return上不需要await
    1.尽量避免使用JSON字符串。有一些模块可以帮助你在JSON和类示例之间进行转换。例如,class-transfromer
    希望这能有所帮助,

相关问题