当前位置: 首页 > 知识库问答 >
问题:

模式拼接两个远程Prisma/GraphQL模式

公冶昆杰
2023-03-14

我试图创建一个基于微服务的应用程序,它使用两个在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
}

现在在Gateway服务器中,我能够成功地使用图形工具内省和合并模式,并且我添加了扩展类型来允许两种类型之间的关系

// LinkTypeDefs
extend type Profile {
    user: User
}

extend type User {
   userProfile: Profile
}

我按照阿波罗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。我已经确保我已经创建了用户对象与现有的配置文件ID,同样与配置文件对象与现有的用户ID。这是查询结果的一个示例

我已经看了大约一个星期的文件了,似乎什么都没用。据我所知,一切都插好了。希望有人能帮忙。我觉得这和碎片有关。我可以提供一个用户和配置文件对象的屏幕截图,以便在需要时进行更多澄清。谢谢

共有1个答案

耿珂
2023-03-14

我最终解决了这个问题,将委托ToSchema()更改为info.mergenfo.delegate()。这似乎起到了作用。

我没有尝试新更新的信息。合并信息。还没有授权给方案。如果更新后的版本有效的话,我会更新这篇文章,但现在这对我来说已经足够了。

希望这能帮助未来的人!

 类似资料:
  • 我有一个关于GraphQL模式拼接的问题。我有两个Graphql模式: 和 我现在尝试使用graphql工具的函数合并模式: 但不是我想要实现的(扩展用户类型): 结果是:type Name{firstname:String!lastname:String!} 在最终架构中只显示一个UserType。我尝试使用中的API来扩展Type,但没有得到任何结果。 有没有办法通过扩展冲突类型来合并模式?

  • Airbnb Clone - GraphQL Server Example with Prisma This project demonstrates how to build a production-ready application with Prisma and graphql-yoga. The API provided by the GraphQL server is the foun

  • 我刚开始使用Prisma。以前,我主要使用firebase和mongodb来定义模式。 我正在尝试定义以下模式: 基本上,我想实现的是让用户能够投票给其他用户(给他们一个分数)。在MongoDB中,我将通过创建一个单独的集合来实现,如以下内容: 在这里,我只是将这些字段(from和for)指定为字符串,然后通过应用程序逻辑将它们与用户集合链接起来。 当然,在GraphQL Prisma中会有所不同

  • 我正在查看用Scala编写GraphQL服务器的Sangria库。但奇怪的是,同一个类型系统必须实现两次:(1)作为GraphQL类型声明的一部分,(2)也是在服务器端,作为Scala case类,附带ObjectType、InterfaceType等。 在Scala中硬编码类型系统尤其令人厌烦,因为我的目的是能够CRUD任意形状的聚合,其中每个形状都被定义为类型的GraphQL集合。例如,假设S

  • 我正在尝试创建一个GraphQL Spring Boot应用程序,以便在现有REST Web API之上创建一个GraphQL层,但在处理模式中的HashMap时遇到了问题。 类有一个名为的字段,它是HashMap。我试图将它定义为一个类型列表,这是一个键/值对,但我得到了以下错误: 这是我的架构文件: 还有我的模特班: 我找到了这个线程返回HashMap 模式: Servlet注册: pom.x