0
votes

I tried to break my code into modules, and now I'm getting the following error:

Error: Query root type must be provided.
    at assertValidSchema (C:\Users\aironsid\Documents\tatooify\server\node_modules\graphql\type\validate.js:71:11)
    at assertValidExecutionArguments (C:\Users\aironsid\Documents\tatooify\server\node_modules\graphql\execution\execute.js:153:35)
    at executeImpl (C:\Users\aironsid\Documents\tatooify\server\node_modules\graphql\execution\execute.js:101:3)
    at Object.execute (C:\Users\aironsid\Documents\tatooify\server\node_modules\graphql\execution\execute.js:63:63)
    at Object.generateSchemaHash (C:\Users\aironsid\Documents\tatooify\server\node_modules\apollo-server-core\dist\utils\schemaHash.js:15:32)
    at ApolloServer.generateSchemaDerivedData (C:\Users\aironsid\Documents\tatooify\server\node_modules\apollo-server-core\dist\ApolloServer.js:269:41)
    at new ApolloServerBase (C:\Users\aironsid\Documents\tatooify\server\node_modules\apollo-server-core\dist\ApolloServer.js:161:38)
    at new ApolloServer (C:\Users\aironsid\Documents\tatooify\server\node_modules\apollo-server-express\dist\ApolloServer.js:60:9)
    at Object.<anonymous> (C:\Users\aironsid\Documents\tatooify\server\index.js:11:16)

Here's my index.js

const express = require('express');
const {
  ApolloServer,
} = require('apollo-server-express');
const { UserTypeDef } = require('./graphql/user/UserTypeDef');
const { UserResolver } = require('./graphql/user/UserResolvers');
const PORT = 4000;

const app = express();

const server = /* Error is thrown here */ new ApolloServer({
  typeDefs: [
    UserTypeDef,
  ],
  resolvers: [
    UserResolver,
  ]
});
server.applyMiddleware({ app });

app.listen({ port: PORT }, () => console.log(`???? Server ready at http://localhost:4000${ server.graphqlPath }`),
);

Here's UserTypeDef.js

const { gql } = require('apollo-server-express');

module.exports = {
  UserTypeDef: gql`    
    type User {
        id: ID
        joinedDate: Int
        name: String
    }
  `,
};

Here's UserResolvers.js

module.exports = {
  UserResolver: {
    User: () => ({
      id: 1,
      joinedDate: 123123,
      name: 'Test',
    }),
  },
};

And here are my dependencies, in case they're useful

"dependencies": {
  "apollo-server-express": "^2.18.2"
  "express": "^4.17.1",
  "graphql": "^15.3.0",
  "mongoose": "^5.10.4"
},

I tried searching, but it seems as I'm either importing or exporting the typeDefs and Resolvers in a wrong way

1
error message is clear ... where is type Query ?xadm
Do I have to create a type Query? I thought I can just create what I need to use. So in my case User.Alex Ironside

1 Answers

0
votes

Ok I fixed it like this:

index.js

const app = require('express')();
const { ApolloServer } = require('apollo-server-express');
const { typeDefs } = require('./graphql/typeDefs');
const { UserResolver } = require('./graphql/user/UserResolvers');

const server = new ApolloServer({
  typeDefs,
  resolvers: [ UserResolver ],
});

server.applyMiddleware({ app });

app.listen({ port: 4000 }, () => console.log(`🚀 Server ready at http://localhost:4000${ server.graphqlPath }`));

typeDefs.js

const { gql } = require('apollo-server-express');
const { UserTypeDef } = require('./user/UserTypeDef');

module.exports.typeDefs =  gql`
    ${ UserTypeDef }
  
    type  Query {
        users: [User]
    }
`;

UserTypeDefs.js

const { gql } = require('apollo-server-express');

module.exports.UserTypeDef = gql`
  type User {
      id: ID
      joinedDate: Int
      name: String
  }
`;

There is some helpful info here