我有一个对象input
,想将其传递给mutation
:
export enum RatingType {
GENERAL = 'GENERAL',
ADULT = 'ADULT',
}
const input = {
id: '123456789',
name: 'yourname',
ratingType: RatingType.ADULT
}
如何像这样将input
传递到mutation
中:
mutation = `mutation updateUser{
user: {
id: "1234567890",
name: "yourname",
ratingType: ADULT,
}
}`
我尝试如下
import {request} from 'graphql-request';
const mutation = `mutation updateUser{
user: {
${JSON.stringify(input)}
}
}`
const response = await request('http://localhost:3002/graphql', mutation);
但是mutation
无法识别:
"id"
必须为id
"name"
必须为name
"ratingType"
必须为ratingType
'123456789'
必须为"123456789"
'yourname'
必须为"yourname"
'ADULT'
必须为ADULT
请给我建议
谢谢。
答案 0 :(得分:0)
首先,GraphQL不是JSON。因此,在此处使用JSON.stringify没有任何意义。 在GraphQL中,您可以将变量用作参数来解决问题。然后,您可以以JSON格式提供变量。
在不知道您正在使用什么库的情况下,我假设您与不带任何graphql库的graphql服务器进行通信。我假设您使用的是类似于fetch
的东西。
我想您有类似UpdateUserInput之类的内容作为输入参数的graphql类型。 因此,要使用变量,您需要像下面这样重写您的突变:
mutation UpdateUser($input: UpdateUserInput) {
updateUser(user: $user) {
id
name
}
}
然后,您可以像这样提供变量:
input: JSON.stringify(input)
因此完整的fetch
调用看起来像这样
const data = {
query: `
mutation ($input: UpdateUserInput) {
updateUser(user: $user) {
id
name
}
}
`,
variables: {
user: input
}
};
fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(data),
});
但是,在不了解GraphQL客户端库的情况下,很难说出如何正确实现它。也许您想看看ApolloClient。
还请记住,我没有测试此代码,因此可能存在一些小错误。