我正在尝试创建一个基于微服务的应用程序,该应用程序使用两个在Docker中运行的远程Prisma / GraphQL模式和一个使用模式缝合对其进行自我检查的网关。
Prisma / GraphQL模式:
// Profile Schema service - http:localhost:3000/profile
type Profile {
id: ID!
user_id: ID!
firstName: String!
...
}
type Query {
findProfileById(id: ID!): Profile
findProfileByUserID(user_id: ID!): Profile
}
// User Schema service - http:localhost:5000/user
type User {
id: ID!
profileID: ID!
email: String!
...
}
type Query {
findUserById(id: ID!): User
findUserByProfileID(profileID: ID!): Profile
}
现在在网关服务器中,我能够成功使用graphql-tools进行自省和mergeSchemas,并且添加了扩展类型以允许这两种类型之间的关系
// LinkTypeDefs
extend type Profile {
user: User
}
extend type User {
userProfile: Profile
}
我按照Apollo GraphQL文档进行了与远程模式的模式缝合,这是我现在合并的模式的解析器
app.use('/gateway', bodyParser.json(), graphqlExpress({ schema: mergeSchemas({
schemas: [
profileSchema,
userSchema,
linkTypeDefs
],
resolvers: mergeInfo => ({
User: {
userProfile: {
fragment: `fragment UserFragment on User { id }`,
resolve(user, args, context, info) {
return delegateToSchema({
schema: profileSchema,
operation: 'query',
fieldName: 'findProfileByUserId',
args: {
user_id: user.id
},
context,
info
},
);
},
},
},
Profile: {
user: {
fragment: `fragment ProfileFragment on Profile { id }`,
resolve(profile, args, context, info) {
return delegateToSchema({
schema: authSchema,
operation: 'query',
fieldName: 'findUserByProfileId',
args: {
profileID: profile.id
},
context,
info
})
}
}
}
}),
})
}));
我遇到的问题是每次我查询用户或个人资料的新扩展字段时,它总是返回null。我确保已使用现有profileId创建了User对象,同样使用具有现有userId的Profile对象也创建了User对象。这是查询结果的一个示例
我已经阅读了大约一个星期的文档,而且似乎没有任何效果。根据我的理解,一切都已正确插入。希望有人可以提供帮助。我感觉它与片段有关。我可以提供用户和个人资料对象的屏幕截图,以便在需要时进行进一步说明。谢谢。