[英]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.