2016-07-03 32 views
0

require在我的模型的一个具体型号,我得到Error: Offer.user field type must be Output Type but got: [object Object].对复杂对象获取的字段类型错误graphql

优惠:

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; 

用户:

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; 

当我从User架构删除offers,requestscomments字段,它正在工作。
我试过要求在User中定义的所有依赖关系,但我仍然得到相同的错误。
我错过了什么?

回答

1

这实际上是你如何构建你的模块的问题,任何与GraphQL都不是问题。事实上,通过用简单对象和console.log()来代替GraphQL结构来说明相同的问题。

由于user.js和offer.js需要彼此,因此require()返回的Module Exports对象在那个时刻不完整。您可以通过在require()的结果上调用console.log()然后在以后运行module.exports = anything来替代模块导出对象,而不是改变现有模块导出对象。由于之前(空)的Exports对象已经是必需的(),所以这个新的导出从不使用。

我相信你可以通过维护现有的模块导出对象来解决这个问题。用exports.something = something代替module.exports = something

+0

注意:如果您使用ES6模块,则无法使用该语法覆盖Module Export对象,因此无法解决此问题。 –

+0

它实际上将错误移到了'index.js'文件(查询对象被定义的地方)。我想我会转向ES6。谢谢! – itaied

+0

更新:ES6做到了。 – itaied

相关问题