我有以下安排:
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
答案 0 :(得分:1)
您在解析器中返回的内容需要与该特定字段的类型相匹配。在架构内部,您已指定根查询字段person
应返回Person
类型,不该类型的列表(数组)。
Array.prototype.filter()
总是返回一个数组。
如果要从people
返回单个对象,则应使用Array.prototype.find()
,这将返回与测试匹配的第一个元素(如果没有找到则返回null)。
如果要返回所有可能的匹配项,则需要更改架构以反映该架构(将返回类型从Person
更改为[Person]
)。然后,您可以继续使用filter
,它应该按预期工作。