gpt4 book ai didi

node.js - 模式拼接两个远程 Prisma/GraphQL 模式

转载 作者:太空宇宙 更新时间:2023-11-04 01:46:05 24 4
gpt4 key购买 nike

我正在尝试创建一个基于微服务的应用程序,该应用程序使用两个在 Docker 中运行的远程 Prisma/GraphQL 架构以及一个使用架构拼接对它们进行内省(introspection)的网关。

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 成功地内省(introspection)和合并模式,并且我添加了扩展类型以允许两种类型之间的关系

// 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 对象创建了用户对象。这是查询结果的示例

enter image description here

我已经浏览了大约一周的文档,但似乎没有任何效果。据我了解,一切都已正确插入。希望有人可以提供帮助。我感觉这和碎片有关系。如果需要,我可以提供用户和配置文件对象的屏幕截图以进行更多说明。谢谢。

最佳答案

我最终通过将 delegateToSchema() 更改为 info.mergeInfo.delegate() 解决了该问题。这似乎成功了。

enter image description here

我还没有尝试过新更新的 info.mergeInfo.delegateToSchema 。如果更新的版本有效,我会更新这篇文章,但现在这对我来说已经可以了。

希望这可以帮助将来的人!

关于node.js - 模式拼接两个远程 Prisma/GraphQL 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51426869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com