title: Apollo GraphQL tutorial: "GraphQLError: Cannot query field \"id\" on type \"LaunchConnection\"."
body: <p>I'm trying to follow the Apollo GraphQL tutorial at this step, <a href="https://www.apollographql.com/docs/tutorial/resolvers/#run-queries-in-the-playground" rel="nofollow noreferrer">https://www.apollographql.com/docs/tutorial/resolvers/#run-queries-in-the-playground</a>. Following <a href="https://github.com/apollographql/fullstack-tutorial" rel="nofollow noreferrer">https://github.com/apollographql/fullstack-tutorial</a>, I ran</p>
  
  <pre><code>cd final/server &amp;&amp; npm i &amp;&amp; npm start
  </code></pre>
  
  <p>as well as</p>
  
  <pre><code>cd final/client &amp;&amp; npm i &amp;&amp; npm start
  </code></pre>
  
  <p>(For the <code>final/server</code>, I first deleted the <code>package-lock.json</code> before running <code>npm install</code> because I was running into issues with the <code>sqlite3</code> dependency).</p>
  
  <p>However, in the GraphQL playground on <code>localhost:4000</code>, if I try to run the query</p>
  
  <pre><code>query GetLaunches {
    launches {
      id
      mission {
        name
      }
    }
  }
  </code></pre>
  
  <p>I get the error response</p>
  
  <pre><code>{
    "error": {
      "errors": [
        {
          "message": "Cannot query field \"id\" on type \"LaunchConnection\".",
          "locations": [
            {
              "line": 3,
              "column": 5
            }
          ],
          "extensions": {
            "code": "GRAPHQL_VALIDATION_FAILED",
            "exception": {
              "stacktrace": [
                "GraphQLError: Cannot query field \"id\" on type \"LaunchConnection\".",
                "    at Object.Field (/Users/kurt/Documents/Scratch/fullstack-tutorial/final/server/node_modules/graphql/validation/rules/FieldsOnCorrectType.js:64:31)",
                "    at Object.enter (/Users/kurt/Documents/Scratch/fullstack-tutorial/final/server/node_modules/graphql/language/visitor.js:334:29)",
                "    at Object.enter (/Users/kurt/Documents/Scratch/fullstack-tutorial/final/server/node_modules/graphql/language/visitor.js:385:25)",
                "    at visit (/Users/kurt/Documents/Scratch/fullstack-tutorial/final/server/node_modules/graphql/language/visitor.js:252:26)",
                "    at Object.validate (/Users/kurt/Documents/Scratch/fullstack-tutorial/final/server/node_modules/graphql/validation/validate.js:63:22)",
                "    at validate (/Users/kurt/Documents/Scratch/fullstack-tutorial/final/server/node_modules/apollo-server-core/dist/requestPipeline.js:211:32)",
                "    at Object.&lt;anonymous&gt; (/Users/kurt/Documents/Scratch/fullstack-tutorial/final/server/node_modules/apollo-server-core/dist/requestPipeline.js:124:42)",
                "    at Generator.next (&lt;anonymous&gt;)",
                "    at fulfilled (/Users/kurt/Documents/Scratch/fullstack-tutorial/final/server/node_modules/apollo-server-core/dist/requestPipeline.js:4:58)",
                "    at processTicksAndRejections (internal/process/task_queues.js:93:5)"
              ]
            }
          }
        },
        {
          "message": "Cannot query field \"mission\" on type \"LaunchConnection\".",
          "locations": [
            {
              "line": 4,
              "column": 5
            }
          ],
          "extensions": {
            "code": "GRAPHQL_VALIDATION_FAILED",
            "exception": {
              "stacktrace": [
                "GraphQLError: Cannot query field \"mission\" on type \"LaunchConnection\".",
                "    at Object.Field (/Users/kurt/Documents/Scratch/fullstack-tutorial/final/server/node_modules/graphql/validation/rules/FieldsOnCorrectType.js:64:31)",
                "    at Object.enter (/Users/kurt/Documents/Scratch/fullstack-tutorial/final/server/node_modules/graphql/language/visitor.js:334:29)",
                "    at Object.enter (/Users/kurt/Documents/Scratch/fullstack-tutorial/final/server/node_modules/graphql/language/visitor.js:385:25)",
                "    at visit (/Users/kurt/Documents/Scratch/fullstack-tutorial/final/server/node_modules/graphql/language/visitor.js:252:26)",
                "    at Object.validate (/Users/kurt/Documents/Scratch/fullstack-tutorial/final/server/node_modules/graphql/validation/validate.js:63:22)",
                "    at validate (/Users/kurt/Documents/Scratch/fullstack-tutorial/final/server/node_modules/apollo-server-core/dist/requestPipeline.js:211:32)",
                "    at Object.&lt;anonymous&gt; (/Users/kurt/Documents/Scratch/fullstack-tutorial/final/server/node_modules/apollo-server-core/dist/requestPipeline.js:124:42)",
                "    at Generator.next (&lt;anonymous&gt;)",
                "    at fulfilled (/Users/kurt/Documents/Scratch/fullstack-tutorial/final/server/node_modules/apollo-server-core/dist/requestPipeline.js:4:58)",
                "    at processTicksAndRejections (internal/process/task_queues.js:93:5)"
              ]
            }
          }
        }
      ]
    }
  }
  </code></pre>
  
  <p>(See screenshot below).</p>
  
  <p><a href="https://i.stack.imgur.com/L6IJr.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/L6IJr.png" alt="enter image description here"></a></p>
  
  <p>Any idea what is causing this? I do see a GraphQL schema in the right pop-up window which appears to contain these fields:</p>
  
  <pre><code>directive @cacheControl(
    maxAge: Int
    scope: CacheControlScope
  ) on FIELD_DEFINITION | OBJECT | INTERFACE
  enum CacheControlScope {
    PUBLIC
    PRIVATE
  }
  
  type Launch {
    id: ID!
    site: String
    mission: Mission
    rocket: Rocket
    isBooked: Boolean!
  }
  
  type LaunchConnection {
    cursor: String!
    hasMore: Boolean!
    launches: [Launch]!
  }
  
  type Mission {
    name: String
    missionPatch(size: PatchSize): String
  }
  
  type Mutation {
    bookTrips(launchIds: [ID]!): TripUpdateResponse!
    cancelTrip(launchId: ID!): TripUpdateResponse!
    login(email: String): String
  }
  
  enum PatchSize {
    SMALL
    LARGE
  }
  
  type Query {
    launches(
      pageSize: Int
      after: String
    ): LaunchConnection!
    launch(id: ID!): Launch
    me: User
  }
  
  type Rocket {
    id: ID!
    name: String
    type: String
  }
  
  type TripUpdateResponse {
    success: Boolean!
    message: String
    launches: [Launch]
  }
  
  scalar Upload
  
  type User {
    id: ID!
    email: String!
    trips: [Launch]!
  }
  </code></pre>