sourcecode

오류가 발생하는 이유: "Query" 유형의 필드 xx를 쿼리할 수 없습니까?

copyscript 2023. 3. 25. 11:45
반응형

오류가 발생하는 이유: "Query" 유형의 필드 xx를 쿼리할 수 없습니까?

GraphiQL에서 성공적으로 테스트한 후 GraphiQL 툴에서 graphQL 쿼리를 복사하여 붙여 넣었는데 반응 내 Apollo 클라이언트에서 시도하면 오류가 반환되었습니다.JS 앱:

[GraphQL error]: Message: Cannot query field "allStudents" on type "Query"., Location: [object Object], Path: undefined

실장은 다음과 같습니다.

const link = createHttpLink({
  uri: 'http://localhost:8000/graphql',
  fetchOptions: { method: "POST" }
});

const client = new ApolloClient({
  link: link 
});

const GET_STUDENTS = gql`
query getStudents($schoolID: Int!){
  allStudents(schoolId: $schoolID){
    pickUpLat
    pickUpLng
  }
}
`;

client
  .query({
    query: GET_STUDENTS,
    variables: { schoolID: 1 }
  })
  .then(result => console.log(result));

뭐가 잘못됐나요?다음은 제가 예상한 올바른 답변입니다.

{
  "data": {
    "allStudents": [
      {
        "pickUpLat": 31.9752942479727,
        "pickUpLng": 35.8438429235775
      },
      {
        "pickUpLat": 31.9754545979993,
        "pickUpLng": 35.8437478537235
      }
    ]
  }
}

편집 GraphiQL을 사용하여 예상된 결과를 얻을 수 있습니다.

편집 2

요구와 GraphiQL 요구 간의 payload를 비교하려고 했습니다.

내 요청 페이로드: (그것은__typename이유는 모르겠지만)

{"operationName":"getStudents","variables":{"schoolID":1},"query":"query getStudents($schoolID: Int) {\n  allStudents(schoolId: $schoolID) {\n    pickUpLat\n    pickUpLng\n    __typename\n  }\n}\n"}

GraphiQL 요청 페이로드:

{"query":"query getStudents($schoolID: Int!){\n  allStudents(schoolId: $schoolID){\n    pickUpLat\n    pickUpLng\n  }\n}","variables":{"schoolID":1},"operationName":"getStudents"}

그럼, 거의 똑같아요, 짐작 가는 거 없어요?

내 쿼리의 결함은 새로운 스키마를 다운로드하지 않았다는 것이다.

다음을 사용하여 스키마를 다운로드할 수 있습니다.apollo schema:download --endpoint=http://localhost:8080/graphql schema.json

http://localhost:8080/graphql을 서버 엔드포인트로 대체

자세한 것은, https://www.apollographql.com/docs/ios/downloading-schema/ 를 참조해 주세요.

제 경우 파라미터가 필요 없는 쿼리를 정의하여 객체 배열을 반환했습니다.

myBasicQuery: [BasicAnswer]

type BasicAnswer {
  name String
  phone String
}

오류가 발생했습니다.Cannot query field \"BasicAnswer\" on type \"BasicAnswer\"내가 이렇게 선언했을 때:

query myBasicQuery {
  BasicAnswer {
      name
      phone
  }
}

Basic Answer 필드만 남겨두면 문제가 해결되었습니다.

query myBasicQuery {
    name
    phone
}

이 문제를 검색할 수 있는 다른 사용자의 경우 다른 패키지가 아닌 패키지에서 가져오십시오.

@apollo/client를 위해 apollo/client를 팔로우하는 사람들은 이제 일몰되었습니다.

쿼리를 구성하는 방법은 다음과 같습니다.

갱신필@graphql-codegen/cli패키지는 최신 버전(2.6.2)으로 정상적으로 동작하고 있습니다.

하수라를 사용하는 사람도 마찬가지입니다.

문제는

  query: query_root
  # query: Query # wrong value before upgrade
  mutation: mutation_root
  subscription: subscription_root
}```

엔티티를 보세요.@Field() 주석이 누락되어 있을 수 있습니다.예:

@PrimaryGeneratedColumn()
id: string;//Will not be mapped by GraphQL and you will get OP's error
    
@Column()
@Field()
name: string;//Will be mapped by GraphQL and you will not get OP's error

graphqls 파일을 fragment화하여 codegen.ts로 정의하는 것을 잊은 경우에도 이 문제가 발생합니다.

(프로젝트):/src/main/main:

  • schema.graphqls
  • search.graphqls

(code-project)/codegen.ts

const codegen: CodegenConfig = {
  overwrite: true,
  // add wildcards here, to read all files:
  schema: "../projectname/src/main/resources/graphql/*.graphqls",
  documents: './src/app/core/graphql/*.ts',
  generates: {
     ....
  }
}

GraphiQL 인터페이스에서 이 문제가 발견되면 페이지를 새로 고치면 새 스키마가 다운로드되고 오류가 사라집니다.

언급URL : https://stackoverflow.com/questions/50434490/why-i-got-error-cannot-query-field-xx-on-type-query

반응형