サブセクションなしでgraphql変更リクエストを送信したい
mutation _ {
updateCurrentUser(fullName: "Syava", email: "[email protected]")
}
そして私は得ています
{
"errors": [
{
"message": "Field \"updateCurrentUser\" of type \"User\" must have a sub selection.",
...
}
]
}
リクエストに{id}を追加すると問題なく機能しますが、私は欲しくない
スキーマコードも
const userType = new GraphQLObjectType({
name: 'User',
fields: () => ({
id: { type: new GraphQLNonNull(GraphQLString) },
fullName: { type: GraphQLString },
email: { type: GraphQLString },
}),
});
type: userType,
args: {
fullName: { type: GraphQLString },
email: { type: new GraphQLNonNull(emailType) },
password: { type: GraphQLString },
},
resolve: async (root, { fullName, email, password }, { rootValue }) => {
const user = await User.findById(rootValue.req.user.id);
...
return user;
},
フィールドのタイプをUserTypeとして定義します。これはミューテーションですが、クエリと同じルールと動作に従います。 UserTypeはオブジェクトタイプであるため、ネストされたフィールドが必要です。
mutation _ {
updateCurrentUser(fullName: "Syava", email: "[email protected]") {
fullName
email
}
}
// would respond with { fullName: 'Syava', email: '[email protected]' }
ミューテーションでユーザーを返さないようにする場合は、たとえば、そのタイプをGraphQLBooleanに宣言できます。これはスカラーであり、ネストされたフィールドはありません。
{
type: GraphQLBoolean,
args: {
fullName: { type: GraphQLString },
email: { type: new GraphQLNonNull(emailType) },
password: { type: GraphQLString },
},
resolve: async (root, { fullName, email, password }, { rootValue }) => {
const user = await User.findById(rootValue.req.user.id);
user.fullName = fullName;
user.password = password; // or hashed to not store plain text passwords
return user.save(); // assuming save returns boolean; depends on the library you use
}
}