2017-09-14 42 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()'。謝謝。 –