可选参数 - 突变 - TypeGraphQL
Posted
技术标签:
【中文标题】可选参数 - 突变 - TypeGraphQL【英文标题】:Optional argument - Mutation - TypeGraphQL 【发布时间】:2020-11-27 06:55:36 【问题描述】:我想更新profile
实体的firstName
和lastName
。
我希望用户能够同时更新它们或只更新其中之一。
但是我不知道如何进行突变以使参数之一(firstName
和 lastName
)是可选的。
我的当前代码如果用户同时输入firstName
和lastName
,它就可以工作
@Mutation(() => Boolean)
@UseMiddleware(isAuth)
async updateProfile(
@Ctx() payload: MyContext,
@Arg('firstName') firstName: string,
@Arg('lastName') lastName: string,
)
try
const profile = await Profile.findOne(where: user: payload!.userId)
if (profile)
profile.firstName = firstName
profile.lastName = lastName
await profile.save();
return true
return false
catch(err)
return false
如果我运行突变(不包括一个参数):
mutation
updateProfile(firstName: "test")
我得到错误:
"message": "String!" 类型的字段 "updateProfile" 参数 "lastName" 是必需的,但未提供。
我在想一种解决方法可能是在 @Arg
中传递一个默认参数,但后来我意识到默认参数是静态的,而不是动态的,所以我不能为那个特定的配置文件传递 firstName
或 lastName
【问题讨论】:
【参考方案1】:要使参数成为可选参数,请将第二个参数传递给@Arg
装饰,如下所示:
@Arg('firstName', nullable: true ) firstName: string,
@Arg('lastName', nullable: true ) lastName: string,
在 GraphQL 中,参数要么是必需的,要么不是。无法指定“只需要其中一个参数”。如果您需要这种验证逻辑,您需要自己在解析器中实现它。
【讨论】:
谢谢。您是否建议为每个参数创建一个突变?一个更新firstName
,一个更新lastName
?这可以是一个解决方案吗?我担心如果我走这条路,我会有太多的突变
这真的取决于你的用例。不过,根据经验,最好有更细粒度的查询和突变,以便将它们的意图更清楚地传达给使用它们的任何人。以上是关于可选参数 - 突变 - TypeGraphQL的主要内容,如果未能解决你的问题,请参考以下文章