2017-09-14 67 views
0

阵列我有以下装置:正确方法来筛选graphql

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阵列中。

{ 
    "data": { 
    "person": { 
     "name": null, 
     "age": null, 
     "interest": null 
    } 
    } 
} 

回答

1

您在解析器中返回的内容需要匹配该特定字段的类型。在模式中,您指定了根查询字段person应该返回一个Person类型,而不是该类型的List(数组)。

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

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

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

+0

我应该阅读更多关于'Array.prototype.filter()'。谢谢。 –