FBS*_*BSO 3 graphql prisma-graphql typegraphql
我想更新一个实体的firstName和。lastNameprofile
我希望用户能够更新它们两者或仅更新其中之一。
但是我不知道如何进行突变,使得参数 ( firstNameand 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
}
}
Run Code Online (Sandbox Code Playgroud)
如果我运行突变(不包括一个参数):
mutation{
updateProfile(firstName: "test")
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
"message": "String!" 类型的字段 "updateProfile" 参数 "lastName" 是必需的,但未提供。
我在想一种解决方法可能是在 中传递一个默认参数,@Arg但后来我意识到默认参数是静态的,而不是动态的,所以我不能为那个特定的配置文件传递firstName或lastName
要使参数可选,请将第二个参数传递给@Arg装饰,如下所示:
@Arg('firstName', { nullable: true }) firstName: string,
@Arg('lastName', { nullable: true }) lastName: string,
Run Code Online (Sandbox Code Playgroud)
在 GraphQL 中,参数要么是必需的,要么不是。无法指定“仅需要这些参数之一”。如果您需要那种验证逻辑,您需要在解析器中自己实现它。
| 归档时间: |
|
| 查看次数: |
1579 次 |
| 最近记录: |