2017-03-20 4 views
3

Ich habe Express-CLI verwendet, um ein einfaches Express-Projekt einzurichten, und folgte Tutorials, um die db.js und schema.js zu erstellen, aber an diesem Punkt kann ich sowieso nicht daran denken, diesen Fehler zu debuggen/einen Teil zu sehen des Schemas in graphiql Dokumentation.Wie man GraphQL mit MySQL verbindet

{ 
    "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." 
    } 
    ] 
} 

App.js

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; 

db.js

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; 

Schema.js

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:() => { 
    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:() => { 
    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; 
+0

Haben Sie mehrere Versionen von graphql installiert, in node_modules ... während ich denke :) könnte es wert sein node_modules Clearing und Resinstalling, wenn Sie nicht bereits –

+0

haben Exportieren und importieren Sie Schema korrekt? –

+0

Knoten-Modul hat nicht funktioniert und in Bezug auf Schema Ich weiß nicht, ich folgte nur Lee Benson, außer ich verwendete Vanille Js und MySQL. Keine Fehler ! – Ash

Antwort

0

aha, ist der Grund, Exporte falsch

exports.default = Schema 

wie diese

module.exports = Schema