在GraphQL模式中,字段如何可以是GraphQLString和GraphQLInt?
以下是我在GraphQL模式的express应用程序中的代码:-在GraphQL模式中,字段如何可以是GraphQLString和GraphQLInt?,graphql,relayjs,relay,graphql-js,Graphql,Relayjs,Relay,Graphql Js,以下是我在GraphQL模式的express应用程序中的代码:- let data = new GraphQLObjectType({ name:"Data", fields: { id: {type: GraphQLID}, value: {type: GraphQLString} // TODO: allow for string as well as int } }); 如何使“value”字段接受字符串值和int值,以便使用正确的
let data = new GraphQLObjectType({
name:"Data",
fields: {
id: {type: GraphQLID},
value: {type: GraphQLString} // TODO: allow for string as well as int
}
});
如何使“value”字段接受字符串值和int值,以便使用正确的类型进行存储?编辑:
此解决方案对该问题无效。它仅适用于对象类型,不适用于标量
您应该查看图形类型:
我不习惯这样定义类型,但我希望它是如下所示:
var ValueType = new GraphQLUnionType({
name: 'Value',
types: [ GraphQLString, GraphQLInt ],
resolveType(value) {
if (value instanceof string) {
return GraphQLString;
}
if (value instanceof number) {
return GraphQLInt;
}
}
});
let data = new GraphQLObjectType({
name:"Data",
fields: {
id: {type: GraphQLID},
value: {type: ValueType}
}
});
根据您的评论,您使用的NoSQL数据库可以将字符串和int放在同一字段中,您应该使用GraphQLString
。在创建上述对象的新实例时,您可以为值字段创建resolve
方法,该方法将检查传递的值是string
还是int
(当然,由于GraphQLString
类型,它将始终是string,但它可以是类似“123”的字符串)
可以解析为int)-根据这一点,您可以在保存到数据库之前执行一些解析。
另一方面,当您从数据库检索数据时,它将始终作为graphql表示中的字符串出现-如果不是这种情况,我认为这可能是一个简单的解决方案
然而,如果您对这个命题不满意,恐怕您无法随心所欲地欺骗GraphQL。每个字段只能获得单个类型定义。好,如果您创建了值<代码>整数< /代码>以及<代码>字符串< /代码>,那么您会考虑什么类型?database@p0k8_GraphQL的要点是隐藏数据库细节。该值是否来自数据库A或B或某个文件或其他API并不重要。因此,让union typesgraphql提供int
是完全有效的,但是该类型的数据库模式是string
,那么它是一个可以直接存储json对象的nosql数据库。因此,字符串将另存为字符串,int将另存为int。UnionType
只能有对象类型,不能包含string
或int
之类的类型。我错过了其中的非标量部分。我看到了这个关于用例的问题:我认为这个答案获得一个向上投票是误导性的,因为它不适用于这个用例。我请求将其再次设置为0。我还没有足够的声誉来做出这一改变。我同意@NikhilAgarwal的支持票。这不是完整的意思。