首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GraphQL错误:无法查询类型'mutation_name‘上的’mutation_name‘字段

GraphQL错误:无法查询类型'mutation_name‘上的’mutation_name‘字段
EN

Stack Overflow用户
提问于 2019-05-01 08:46:20
回答 2查看 17.5K关注 0票数 16

我想突变一种突变。这种突变确实存在,并且在我的graphql操场上工作得很好。但是当我在我的react组件中实现它时,我会得到错误。不过,查询工作很好。顺便说一句,我需要客户端在我的代码中,所以我肯定必须使用ApolloConsumer。

我试过像client.mutate一样使用https://github.com/apollographql/apollo-client/issues/2762

代码语言:javascript
复制
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) {^

EN

回答 2

Stack Overflow用户

发布于 2022-03-01 01:22:39

同样的问题,我想补充一下我的2美分,作为一个答案:

对于不同的GraphQL服务器,我有几个不同端点的“上下文”。

我用的是突变钩,比如:

代码语言:javascript
复制
const THE_QUERY_OR_MUTATION_CODE = gql`
  mutation {
    myMutation(etc) {
    _id
    etc
  }
}`

const [handlerOrCaller, { loading, error, data } ] =
  useMutation(THE_QUERY_OR_MUTATION_CODE);

这样,我就没有给它正确的“上下文”,所以阿波罗客户端获取了找到的第一个上下文,这当然是另一个端点,在那里模式当然没有名为myMutation的突变。

我的阿波罗客户端的配置是:

代码语言:javascript
复制
const client = new ApolloClient({
  cache: new InMemoryCache({
    dataIdFromObject: (object) => object.key || null
  }),
  link: authLink.concat(splitOne)
});

splitOne是一个由不同端点组成的级联变量,其方式如下:

代码语言:javascript
复制
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
);

所以,在我的例子中,正确的方法是使用正确的上下文:

代码语言:javascript
复制
const [handlerOrCaller, { loading, error, data } ] =
  useMutation(THE_QUERY_OR_MUTATION_CODE, {
  context: { clientName: 'context_c' }
});
票数 0
EN

Stack Overflow用户

发布于 2022-07-15 10:42:28

我的错误很小:我在后端使用了类型图appolo服务器,但是在解析器字段中添加了数据源而不是正确的解析器:

代码语言:javascript
复制
const schema = await buildSchema({
    resolvers: [
      FirstResolver,
      SecondResolver,
      // added datasource instead of resolver
      ThirdDataSource,
      FourthResolver,
]})

用解析器替换数据源解决了这个问题。

包版本

代码语言:javascript
复制
    "apollo-datasource": "^3.0.3",
    "type-graphql": "^1.1.1",
    "apollo-server-core": "^3.6.2",
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55933721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档