title: How to connect GraphQL to MySQL
body: <p>I've used express cli to set up a simple express project, And followed tutorials to create the <code>db.js</code> and <code>schema.js</code> but at this point I cant think of anyway to debug this error / to view any part of the schema in <code>graphiql</code> documentation. </p>
  
  <pre><code>{
    "errors": [
      {
        "message": "Schema must be an instance of GraphQLSchema. Also ensure that there are not multiple versions of GraphQL installed in your node_modules directory."
      }
    ]
  }
  </code></pre>
  
  <p><strong>App.js</strong></p>
  
  <pre><code>var express = require('express');
  var path = require('path');
  var favicon = require('serve-favicon');
  var logger = require('morgan');
  var cookieParser = require('cookie-parser');
  var bodyParser = require('body-parser');
  
  var index = require('./routes/index');
  var users = require('./routes/users');
  
  var schema = require('./schema');
  var graphqlHTTP = require('express-graphql');
  
  var app = express();
  
  // view engine setup
  app.set('views', path.join(__dirname, 'views'));
  app.set('view engine', 'pug');
  
  // uncomment after placing your favicon in /public
  //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
  app.use(logger('dev'));
  app.use(bodyParser.json());
  app.use(bodyParser.urlencoded({extended: false}));
  app.use(cookieParser());
  app.use(express.static(path.join(__dirname, 'public')));
  
  app.use('/', index);
  app.use('/users', users);
  
  app.use('/api', graphqlHTTP({schema, graphiql: true}));
  
  // catch 404 and forward to error handler
  app.use(function(req, res, next) {
      var err = new Error('Not Found');
      err.status = 404;
      next(err);
  });
  
  // error handler
  app.use(function(err, req, res, next) {
      // set locals, only providing error in development
      res.locals.message = err.message;
      res.locals.error = req.app.get('env') === 'development'
          ? err
          : {};
  
      // render the error page
      res.status(err.status || 500);
      res.render('error');
  });
  
  module.exports = app;
  </code></pre>
  
  <p><strong>db.js</strong></p>
  
  <pre><code>var Sequelize = require('sequelize');
  var mysql = require('mysql');
  var _ = require('lodash');
  
  var Conn = new Sequelize('DB', 'Username', 'password', {
      host: 'DB IP',
      dialect: 'mysql'
  });
  
  var Sectors = Conn.define('sectors', {
      name: {
          type: Sequelize.STRING,
          allowNull: false
      }
  });
  
  Sectors.sync({force: true}).then(function () {
    // Table created
    return Sectors.create({
      name: 'test'
    });
  });
  
  exports.default = Conn;
  </code></pre>
  
  <p><strong>Schema.js</strong></p>
  
  <pre><code>var {
      GraphQLSchema,
      GraphQLObjectType,
      GraphQLID,
      GraphQLString,
      GraphQLInt,
      GraphQLBoolean,
      GraphQLList,
      GraphQLNonNull
  } = require('graphql');
  
  var Db = require('./db');
  
  var Sectors = new GraphQLObjectType({
    name: 'sectors',
    description: 'list of all the sectors',
    fields: () =&gt; {
      return {
        id: {
          type: GraphQLInt,
          resolve (sectors) {
            return sectors.id;
          }
        },
        name: {
          type: GraphQLString,
          resolve (sectors) {
            return sectors.name;
          }
        }
      };
    }
  });
  
  var Query = new GraphQLObjectType({
    name: 'Query',
    description: 'Root query object',
    fields: () =&gt; {
      return {
        sectors: {
          type: new GraphQLList(Sectors),
          args: {
            id: {
              type: GraphQLInt
            },
            name: {
              type: GraphQLString
            }
          },
          resolve (root, args) {
            return Db.models.sectors.findAll({ where: args });
          }
        }
      };
    }
  });
  
  var Schema = new GraphQLSchema({query: Query});
  exports.default = Schema;
  </code></pre>