gpt4 book ai didi

javascript - 在运行时修改 GraphQLObjectType 字段

转载 作者:行者123 更新时间:2023-12-03 05:19:40 25 4
gpt4 key购买 nike

假设我有以下代码作为 graphql 架构。 userType 包括用户的 idname,并且有两种查询:allUsers: [userType]用户(id:Int!):用户类型

let db = [{
id: 1,
name: 'Amir'
}, {
id: 2,
name: 'John'
}];

const userType = new GraphQLObjectType({
name: 'User',
fields: {
id: { type: GraphQLInt },
name: { type: GraphQLString }
}
});


const queryType = new GraphQLObjectType({
name: 'Query',
fields: {
allUsers: {
type: new GraphQLList(userType),
resolve: () => db
},
user: {
type: userType,
args: {
id: { type: new GraphQLNonNull(GraphQLInt) }
},
resolve: (_, { id }) => db.find(user => user.id == id);
}
}
})

let schema = new GraphQLSchema({ query: queryType });

我需要在启动时修改这个结构。我的意思是在实际执行最后一行之前。

为了添加更多类型的查询,我将架构创建 (new GraphQLSchema(...)) 推迟到了所有修改完成之后。因此,我可以向查询本身添加更多字段,或者修改现有字段。

但是如何修改已经定义的类型基本上,我需要向userType<添加其他字段,就像permissions一样,它本身是一个GraphQLObjectType并且有自己的resolve函数。

类似这样的事情:

let queryFields = {};

const userType = new GraphQLObjectType({
name: 'User',
fields: {
id: { type: GraphQLInt },
name: { type: GraphQLString }
}
});
queryFields['allUsers'] = {
type: new GraphQLList(userType),
// ...
}
queryFields['user'] = {
type: userType,
//...
}

/* HERE <---------------------------------------- */
userType.fields.permission = {
type: GraphQLString,
resolve: user => getPermissionsFor(user);
}


const queryType = new GraphQLObjectType({
name: 'Query',
fields: queryFields
})

var schema = new GraphQLSchema({ query: queryType });

谢谢!

最佳答案

我最后所做的是在我的应用程序逻辑和 GraphQL 之间添加另一层。因此,我创建了另一个库来保存有关架构和类型的信息,并且它有一个 API 可以修改架构中的现有类型。所有修改完成后,我们就可以从库中提取 GraphQL 架构。

这就是整个想法。对于实现细节,我在这里写了一篇文章:Distributed Schema Creation in GraphQL

关于javascript - 在运行时修改 GraphQLObjectType 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41450750/

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