在GraphQL中,可以使用introspection
来获取对象的字段信息。通过检查对象字段的类型,我们可以判断字段是否为空。
以下是一个使用graphql-js
库的示例代码,该代码查询一个对象的所有字段,并省略空字段:
const { graphql, buildSchema, getIntrospectionQuery, execute } = require('graphql');
// 定义GraphQL Schema
const schema = buildSchema(`
type Query {
id: ID!
name: String
age: Int
address: String
email: String
}
`);
// 定义查询字符串
const query = `
{
id
name
age
address
email
}
`;
// 使用introspection查询获取对象的字段信息
const introspectionQuery = getIntrospectionQuery();
execute(schema, introspectionQuery).then(result => {
// 解析introspection结果,获取字段类型信息
const fields = result.data.__schema.types.find(type => type.name === 'Query').fields;
// 执行查询
graphql(schema, query).then(result => {
// 遍历查询结果,省略空字段
const data = {};
Object.keys(result.data).forEach(key => {
const field = fields.find(f => f.name === key);
if (field && result.data[key] !== null && result.data[key] !== undefined) {
data[key] = result.data[key];
}
});
console.log(data);
});
});
在以上示例中,我们首先定义了一个GraphQL Schema,其中包含一个Query
类型,有id
、name
、age
、address
和email
字段。
然后,我们使用getIntrospectionQuery()
函数获取introspection查询字符串,并执行该查询以获取对象字段的类型信息。
接下来,我们执行实际的GraphQL查询,并使用fields
变量中的字段类型信息来判断每个字段是否为空。
最后,我们遍历查询结果,将非空字段存储在data
对象中,并打印出来。
注意:以上示例仅适用于查询顶层字段。如果查询中包含嵌套字段,需要递归地检查每个嵌套字段的类型和值。
上一篇:不同类型的子查询