我想突变一种突变。这种突变确实存在,并且在我的graphql操场上工作得很好。但是当我在我的react组件中实现它时,我会得到错误。不过,查询工作很好。顺便说一句,我需要客户端在我的代码中,所以我肯定必须使用ApolloConsumer。
我试过像client.mutate一样使用https://github.com/apollographql/apollo-client/issues/2762
export const LOGIN = gql`
mutation LOGIN($email: String!, $password: String!) {
login(email: $email, password: $password) {
email
}
}
`;
class LoginComponent extends Component{
render(){
return(
<ApolloConsumer>
{client=>{
return(
<Button onClick={()=>{
client
.mutate({
mutation: LOGIN,
variables: {
email: "test@test.com",
password: "test"
}
})
.then(result => {
console.log('result', result)
})
.catch(err => {
console.log("err", err);
alert(err.toString());
});
}}>
OK
</Button>
)
}}
</ApolloConsumer>
)
}
}我希望获得成功,但我得到了错误: GraphQL错误:无法查询字段‘登录’类型‘突变’。(第2行,第3栏):登录(电子邮件:$email,密码:$password) {^
发布于 2022-03-01 01:22:39
同样的问题,我想补充一下我的2美分,作为一个答案:
对于不同的GraphQL服务器,我有几个不同端点的“上下文”。
我用的是突变钩,比如:
const THE_QUERY_OR_MUTATION_CODE = gql`
mutation {
myMutation(etc) {
_id
etc
}
}`
const [handlerOrCaller, { loading, error, data } ] =
useMutation(THE_QUERY_OR_MUTATION_CODE);这样,我就没有给它正确的“上下文”,所以阿波罗客户端获取了找到的第一个上下文,这当然是另一个端点,在那里模式当然没有名为myMutation的突变。
我的阿波罗客户端的配置是:
const client = new ApolloClient({
cache: new InMemoryCache({
dataIdFromObject: (object) => object.key || null
}),
link: authLink.concat(splitOne)
});该splitOne是一个由不同端点组成的级联变量,其方式如下:
const endpointALink = createHttpLink({
uri: process.env.REACT_APP_ENDPOINT_A
});
const ednpointBLink = createUploadLink({
uri: process.env.REACT_APP_ENDPOINT_B
});
const endpointCLink = createUploadLink({
uri: process.env.REACT_APP_ENDPOINT_C
});
const endpointDLink = createHttpLink({
uri: process.env.REACT_APP_ENDPOINT_D
});
const splitThree = split(
(operation) => operation.getContext().clientName === 'context_a',
endpointA,
endpointB
);
const splitTwo = split(
(operation) => operation.getContext().clientName === 'context_b',
endpointC,
splitThree
);
const splitOne = split(
(operation) => operation.getContext().clientName === 'context_c',
endpointD,
splitTwo
);所以,在我的例子中,正确的方法是使用正确的上下文:
const [handlerOrCaller, { loading, error, data } ] =
useMutation(THE_QUERY_OR_MUTATION_CODE, {
context: { clientName: 'context_c' }
});发布于 2022-07-15 10:42:28
我的错误很小:我在后端使用了类型图和appolo服务器,但是在解析器字段中添加了数据源而不是正确的解析器:
const schema = await buildSchema({
resolvers: [
FirstResolver,
SecondResolver,
// added datasource instead of resolver
ThirdDataSource,
FourthResolver,
]})用解析器替换数据源解决了这个问题。
包版本
"apollo-datasource": "^3.0.3",
"type-graphql": "^1.1.1",
"apollo-server-core": "^3.6.2",https://stackoverflow.com/questions/55933721
复制相似问题