我是GrpahQL的新手,我试图模拟用户和群组之间的多对多关系。我有我的架构中定义的followinf类型:
// UserType.js
const {
GraphQLObjectType,
GraphQLString,
GraphQLList,
GraphQLID } = require('graphql');
const {
GraphQLEmail } = require('graphql-custom-types');
const GroupType = require('./GroupType'); const AuthService = require('../../services/AuthService');
let authService = new AuthService();
const UserType = new GraphQLObjectType({
name: "UserType",
fields: () => ({
id: { type: GraphQLID },
user: { type: GraphQLString },
password: { type: GraphQLString },
name: { type: GraphQLString },
lastname: { type: GraphQLString },
email: { type: GraphQLEmail },
groups: {
type: new GraphQLList(GroupType),
resolve(parentValue) {
return authService.userGroups(userId);
}
}
}) });
module.exports = UserType;
这是另一个文件:
// GroupType.js
const {
GraphQLObjectType,
GraphQLString,
GraphQLID,
GraphQLList
} = require('graphql');
const UserType = require('./UserType');
const AuthService = require('../../services/AuthService');
let authService = new AuthService();
const GroupType = new GraphQLObjectType({
name: "GroupType",
fields: () => ({
id: { type: GraphQLID },
name: { type: GraphQLString },
description: { type: GraphQLString },
users: {
type: new GraphQLList(UserType),
resolve(parentArgs) {
return authService.userGroups(parentArgs.id);
}
}
})
});
module.exports = GroupType;
这个例子对我不起作用,因为某些原因我得到了这个错误:
错误:只能创建GraphQLType的List但得到:[object Object]。
此错误仅针对GroupType发生,而不是针对两者类似的UserType。这里发生了什么?我做错了什么?
答案 0 :(得分:0)
问题在于UserType
需要GroupType
,而GroupType
需要UserType
:这称为循环依赖。
会发生什么需要UserType.js
,在完成运行时导出{}
(这是标准的Node.js模块执行),需要GroupType
,这需要返回{{1}然后获取一个空对象,并将正确的GraphQL UserType
导出到GroupType
。所以UserType
有效,因为它是UserType
的列表,但GroupType
并不是因为需要UserType而得到一个空对象。
为了避免这种情况,您可以在GroupType
中使用运行时要求:
GroupType.js