2016-07-03 2 views
0

I require ein bestimmtes Modell in einem meiner Modelle und ich Error: Offer.user field type must be Output Type but got: [object Object].Erste Feldtyp Fehler auf komplexes Objekt in graphql

Angebot:

var graphql = require('graphql'), 
    GraphQLBoolean = graphql.GraphQLBoolean, 
    GraphQLObjectType = graphql.GraphQLObjectType, 
    GraphQLInt = graphql.GraphQLInt, 
    GraphQLString = graphql.GraphQLString; 
var Game = require('./game'); 
var Post = require('./post'); 
var User = require('./user'); 

var Offer = new GraphQLObjectType({ 
    name: 'Offer', 
    description: 'This object represents the offers for the specified user.', 
    fields:() => ({ 
    id: { 
     description: 'The id of the offer.', 
     type: GraphQLInt 
    }, 
    createdAt: { 
     description: 'The creation date of the offer.', 
     type: GraphQLString 
    }, 
    exchange: { 
     description: 'Specifies whether this offer is exchangeable.', 
     type: GraphQLBoolean 
    }, 
    price: { 
     description: 'The price for the specified offer.', 
     type: GraphQLInt 
    }, 
    game: { 
     description: 'The corresponding game of the offer.', 
     type: Game, 
     resolve: offer => offer.getGame() 
    }, 
    post: { 
     description: 'The corresponding post which expand this offer.', 
     type: Post, 
     resolve: offer => offer.getPost() 
    }, 
    user: { 
     description: 'The user who created this offer.', 
     type: User, 
     resolve: offer => offer.getUser() 
    } 
    }) 
}); 

module.exports = Offer; 

Benutzer:

var graphql = require('graphql'), 
    GraphQLString = graphql.GraphQLString, 
    GraphQLObjectType = graphql.GraphQLObjectType, 
    GraphQLList = graphql.GraphQLList; 
var Offer = require('./offer'); 
var Request = require('./request'); 
var Comment = require('./comment'); 

var User = new GraphQLObjectType({ 
    name: 'User', 
    description: 'This object represents the registered users.', 
    fields:() => ({ 
    id: { 
     description: 'The id of the user.', 
     type: GraphQLString 
    }, 
    name: { 
     description: 'The full name of the user.', 
     type: GraphQLString 
    }, 
    email: { 
     description: 'The email of the user.', 
     type: GraphQLString 
    }, 
    phone: { 
     description: 'The phone number of the user.', 
     type: GraphQLString 
    }, 
    createdAt: { 
     description: 'The creation date of the user.', 
     type: GraphQLString 
    }, 
    offers: { 
     description: 'The offers created by the user.', 
     type: new GraphQLList(Offer), 
     resolve: user => user.getOffers() 
    }, 
    requests: { 
     description: 'The requests created by the user.', 
     type: new GraphQLList(Request), 
     resolve: user => user.getRequests() 
    }, 
    comments: { 
     description: 'The comments this users wrote.', 
     type: new GraphQLList(Comment), 
     resolve: user => user.getComments() 
    } 
    }) 
}); 

module.exports = User; 

Als ich Entfernen Sie die offers, requests und comments Felder aus dem User Schema, es funktioniert.
Ich habe versucht, alle Abhängigkeiten in User definiert, aber ich bekomme immer noch den gleichen Fehler.
Was fehlt mir?

Antwort

1

Dies ist tatsächlich ein Problem mit, wie Sie Ihre Module zu bauen, nicht wirklich ein Problem mit GraphQL. In der Tat können Sie das gleiche Problem veranschaulichen, indem Sie die GraphQL-Strukturen durch einfache Objekte und console.log() zur Veranschaulichung ersetzen.

Da user.js und offer.js einander erfordern, ist das Modul Module Exports, das von require() zurückgegeben wird, zu diesem Zeitpunkt unvollständig. Sie können dies für sich selbst sehen, indem Sie console.log() für das Ergebnis von require() aufrufen und später, wenn Sie es ausführen module.exports = anything Sie ersetzen das Modul Exports-Objekt, anstatt das vorhandene zu mutieren. Da das vorherige (leere) Exports-Objekt bereits benötigt wurde(), wird dieser neue Export nie verwendet.

Ich glaube, dass Sie dies beheben können, indem Sie die vorhandenen Modulexportobjekte beibehalten. Ersetzen

+0

Hinweis: Wenn Sie ES6-Module verwenden, ist dieses Problem nicht möglich, da Sie das Modul Export-Objekt nicht mit dieser Syntax überschreiben können. –

+0

Der Fehler wurde tatsächlich in die Datei 'index.js' verschoben (wo das Abfrageobjekt definiert ist). Ich denke, ich werde einfach nach ES6 ziehen. Vielen Dank! – itaied

+0

Update: ES6 hat es geschafft. – itaied

Verwandte Themen