簡體   English   中英

GraphQL:以某種類型重用root_query的參數

[英]GraphQL : Reuse arguments from root_query in a type

我試圖將REST API包裝在GraphQL中,並且碰到了這一點。 想象一下我有以下類型:

const CbookType = new GraphQLObjectType({
name: 'CbookType',
fields: () => ({
    id: { type: GraphQLID },
    title: { type: GraphQLString },
    user: {
        type: UserType,
        args: {
            userToken: { type: new GraphQLNonNull(GraphQLString) },
            userId: { type: new GraphQLNonNull(GraphQLString) }
        },
        resolve(parentValue, { userToken, userId }) {
            return UserController.user({ targetUserId: parentValue.user_id, userToken, userId });
        }
    }
});

用戶字段位於另一個REST端點上,因此我必須再次傳遞令牌和user_id,這將創建難看的查詢,在其中我必須為令牌和user_id永久添加args。

有沒有辦法讓args在RootQuery中傳遞並在我的類型中重用它們? 我已經調查了parentValue,但它們不存在。

傳遞給解析器的第一個參數(parentValue)只是字段的“父”解析為的參數-它不會包含有關請求本身或如何解析值的任何信息。

因為GraphQL在繼續進行之前解析了請求的每個“級別”,所以您可以在更高級別上修改傳遞給每個解析器的上下文(第三個參數),並且這些更改對於更低級別的所有解析器都是可見的。

例如,獲取Foo類型的查詢的解析器:

function (obj, { userToken, userId }, ctx = {}) => {
  Object.assign(ctx, { userToken, userId })
  return getFoo()
}

然后,類型為Foo的字段可能如下所示:

function (obj, { userToken, userId }, ctx = {}) => {
  return getBars(ctx.userToken, ctx.userId)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM