graphql - 当参数是输入类型时,如何查询 GraphQL 架构?
问题描述
我对如何查询以下 GraphQL 模式感到有些困惑。我正在尝试查询宠物小精灵以提取搜索结果,但事实是 PokemonQueryInput! 在参数和 PokemonConnection! 中调用!结果让我很困惑。如何正确添加过滤器作为参数?以及如何正确使用 PokemonConnection?
架构.graphql
type Query {
pokemons(query: PokemonsQueryInput!): PokemonConnection!
pokemonByName(name: String!): Pokemon
pokemonById(id: ID!): Pokemon
pokemonTypes: [String!]!
}
input PokemonsQueryInput {
limit: Int = 10
offset: Int = 0
search: String
filter: PokemonFilterInput
}
input PokemonFilterInput {
type: String
isFavorite: Boolean
}
type PokemonConnection {
limit: Int!
offset: Int!
count: Int!
edges: [Pokemon!]!
}
type Pokemon {
id: ID!
number: Int!
name: String!
...
}
index.js
pokemons: (__, args) => {
const { limit, offset, search, filter } = args.query;
let pokemons = pokemonsData;
if (search) {
const regex = new RegExp(search, 'i');
pokemons = _.filter(pokemons, p => p.name.match(regex));
}
if (filter) {
if (filter.type) {
const regex = new RegExp(filter.type, 'i');
pokemons = _.filter(pokemons,p => _.some(p.types, t => t.match(regex)));
}
if (filter.isFavorite) {
pokemons = _.filter(pokemons, p => !!favorites.get(p.id));
}
}
const count = pokemons.length;
const edges = pokemons.slice(offset, offset + limit);
return {
limit,
offset,
count,
edges
}
},
解决方案
我通过关于对象类型的 GraphQL 文档找到了如何执行此操作的解决方案:https ://graphql.org/graphql-js/object-types/ 。类型可以通过嵌套在 { } 中来声明为参数。
{
pokemons(query: {filter: {type: "Water"}}) {
edges {
name
}
}
}
推荐阅读
- go - 为什么我们在这个 append 函数调用中需要三个点?
- python - 我正在尝试使用 pandas 库在 python 中创建一个数据框。但低于错误
- vb.net - Win32_Processor VirtualizationFirmwareEnabled 始终返回 False
- python - RequestParser:无法解析字典参数
- vb.net - 如何删除 vb.net 中文本文件末尾的行?
- java - 如何解决:** Whitelabel 错误页面。** 我得到 **此应用程序没有 /error 的显式映射,因此您将其视为后备。**
- java - 在服务器端使用 Android 库
- svg - 如何使用 svg 路径创建时髦的圆圈?
- python - Dart XMLHttpRequest 错误故障排除 - 适用于 Flutter 移动设备,不适用于 Flutter web
- vb.net - 错误“AddressOf 表达式无法转换为整数,因为整数不是委托类型”