在graphql中过滤数组的正确方法

时间:2017-09-14 15:36:39

标签: graphql

我有以下安排:

npm start

当我运行以下查询时:

const Person = function(name, age, interest) {
    this.name = name;
    this.age = age;
    this.interest = interest;
}

const people = [
    new Person("rajat", 29, ['prog','food','gym']),
    new Person("ravi", 23, ['travel', 'cook', 'eat']),
    new Person("preeti", 19,  ['comedy', 'arts', 'beauty'])
];

const schema = buildSchema(`
    type Person {
        name: String,
        age: Int,
        interest: [String]
    },
    type Query {
        hello: String,
        giveTen(input: Int!): Int,
        person(name: String!): Person!, 
    }
`);

const root = {
    hello: () => 'Hello World',
    giveTen: (args) => args.input * 10,
    person: (args) => people.filter(item => item.name === args.name),
};

query PersonDetails { person(name: "rajat") { name age interest } } 数组中明显存在匹配数据时,我得到了大量nulls

people

1 个答案:

答案 0 :(得分:1)

您在解析器中返回的内容需要与该特定字段的类型相匹配。在架构内部,您已指定根查询字段person应返回Person类型,该类型的列表(数组)。

Array.prototype.filter()总是返回一个数组。

如果要从people返回单个对象,则应使用Array.prototype.find(),这将返回与测试匹配的第一个元素(如果没有找到则返回null)。

如果要返回所有可能的匹配项,则需要更改架构以反映该架构(将返回类型从Person更改为[Person])。然后,您可以继续使用filter,它应该按预期工作。