我和用户及其成员有这种关系 . 成员资格字段是用户与多个成员资格之间的连接 .
const MembershipType = new GraphQLObjectType({
name: 'Membership',
interfaces: [nodeInterface],
fields: {
id: globalIdField(),
user: {
type: new GraphQLNonNull(UserType),
resolve(parent, args, ctx: Context) {
return ctx.userById.load(parent.user_id);
},
},
role: {
type: new GraphQLNonNull(GraphQLString),
},
team: {
type: GraphQLString,
},
createdAt: {
type: new GraphQLNonNull(GraphQLString),
resolve(parent) {
return parent.created_at;
},
},
updatedAt: {
type: new GraphQLNonNull(GraphQLString),
resolve(parent) {
return parent.updated_at;
},
},
},
});
export default MembershipType;
const UserType = new GraphQLObjectType({
name: 'User',
interfaces: [nodeInterface],
fields: {
id: globalIdField(),
firstName: {
type: GraphQLString,
resolve(parent) {
return parent.first_name;
},
},
lastName: {
type: GraphQLString,
resolve(parent) {
return parent.last_name;
},
},
email: {
type: GraphQLString,
resolve(parent) {
return parent.email;
},
},
memberships: {
type: new GraphQLList(MembershipType),
resolve(parent, args, ctx: Content) {
return ctx.membershipsByUserId.load(parent.id);
},
},
membershipsCount: {
type: new GraphQLNonNull(GraphQLInt),
resolve(parent, args, ctx: Context) {
return ctx.userMembershipsCount.load(parent.id);
},
},
},
});
export default UserType;
这里的问题是我有这个错误 user field in MembershipType 导致错误
Blockquote /Users/nizarayari/Arise/arise-auth/node_modules/graphql/jsutils/invariant.js:19抛出新的错误(消息); ^错误:预期未定义为GraphQL可空类型 . 在assertNullableType(/ Users / nizarayari / Arise / aris-auth / node_modules / graphql / type / definition)的不变量(/Users/nizarayari/Arise/arise-auth/node_modules/graphql/jsutils/invariant.js:19:11) . js:261:51)在Object的新GraphQLNonNull(/Users/nizarayari/Arise/arise-auth/node_modules/graphql/type/wrappers.js:79:54) . (/Users/nizarayari/Arise/arise-auth/src/schema/membership/MembershipType.js:25:13)在Module._compile(module.js:624:30)处于Object.Module._extensions..js(模块) .js:635:10)在Module.load(module.js:545:32)的try.moduleLoad(module.js:508:12),在Module.require的Function.Module._load(module.js:500:3) (module.js:568:17)at对象的require(internal / module.js:11:18) . (/Users/nizarayari/Arise/arise-auth/src/schema/user/UserType.js:19:1)在Module._compile(module.js:624:30)处于Object.Module._extensions..js(模块) .js:635:10)在tryModuleLoad的Module.load(module.js:545:32)(module.js:508:12)
这是我对用户的查询
import UserType from './UserType';
import type Context from '../../Context';
const me = {
type: UserType,
resolve(root: any, args: any, ctx: Context) {
return ctx.user && ctx.userById.load(ctx.user.id);
},
};
export default {
me,
};
对会员资格的查询只是变异
2 回答
两个字段都在同一个js文件中吗?您在成员资格和UserType上有
export default
,看起来像是相同的js文件 .您只能在每个文件中的一个字段上使用
export default
.将这两个字段分开后,由于Membership取决于UserType,诀窍是使用一个返回Membership中的fields对象的函数
代替:
您可能需要在文件中将
UserType
移到MembershipType
之上 .https://repl.it/@tcoughlin3/CumbersomeClassicRat