首页 > 解决方案 > TypeGraphQL_如何避免创建未输入的字段

问题描述

@Resolver()
export class NameCardCreateResolver {
  @Mutation(() => BaseMutationResponse)
  async namecardCreate(
    @Arg("chosenSNSUrls", () => SNSInput)
    { facebook, twitter, instagram, blog, youtube }: SNSInput,
    @Arg("owner", () => NameCardOwner)
    { ownerEmail }: NameCardOwner
  ): Promise<BaseMutationResponse> {
    const response = new BaseMutationResponse();
    try {
      await NameCardModel.create({
        sns: {
          facebook,
          twitter,
          instagram,
          blog,
          youtube
        },
        owner: {
          email: ownerEmail,
        },

还有 SNSINPUT 类型,,

@InputType()
export class SNSInput {
  @Field({ nullable: true, defaultValue: null })
  facebook?: string;

  @Field({ nullable: true, defaultValue: null })
  instagram?: string;

  @Field({ nullable: true, defaultValue: null })
  youtube?: string;

  @Field({ nullable: true, defaultValue: null })
  blog?: string;

  @Field({ nullable: true, defaultValue: null })
  twitter?: string;
}

它运作良好,但它是在我的 MongoDB 领域中创建的。

在此处输入图像描述

如何防止创建不必要的空处理 sns 字段?

标签: typescriptmongodbgraphqlresolvertypegraphql

解决方案


如果您不想将字段保存到 MongoDB,请将其值设置为undefined(而不是null)。这应该从文档中完全省略该字段。

您可能必须defaultValue: null从 typegraphql 注释中删除,因为这可能会将其设置为null默认值。

@InputType()
export class SNSInput {
  @Field({ nullable: true })
  facebook?: string;

  @Field({ nullable: true })
  instagram?: string;

  @Field({ nullable: true })
  youtube?: string;

  @Field({ nullable: true })
  blog?: string;

  @Field({ nullable: true })
  twitter?: string;
}

或者,如果您想保留null输入中的值,您要么必须显式覆盖它们,undefined要么使用完全删除它们delete


推荐阅读