无法为非空字段返回null。
我有一个graphQL解析器通过exerciseEntry,它会击中用户ID,然后在查询用户ID时尝试在其中查找用户信息。 playgound显示上面的错误。
我尝试设置对象结果以匹配用户数据,但仍然没有得到返回。
解析器:
Query: {
getExerciseEntries: async (root, args, ctx) => {
const entries = await ExerciseEntry.getAll();
console.log(entries);
return entries;
},
getExerciseEntryBy: async (root, args, ctx) => {
const entry = await ExerciseEntry.findBy(args.filter);
return entry;
},
getExerciseEntryById: async (root, args, ctx) => {
const entry = await ExerciseEntry.findById(args.id);
return entry;
}
},
ExerciseEntry: {
user: async (root, args, ctx, info) => {
const user = await Users.findBy({id: root.exercise_entry_user_id})
console.log("seeing users", user)
return user
}
}
TypeDefs:
type Query {
getExerciseEntries: [ExerciseEntry!]!
getExerciseEntryBy(filter: String!): ExerciseEntry!
getExerciseEntryById(id: ID!): ExerciseEntry!
}
type ExerciseEntry {
id: ID!
date: String!
name: String!
caloriesBurned: Int!
user: User!
}
type User {
id: ID!
firstName: String!
lastName: String!
username: String!
email: String!
userType: String!
calorieGoal: Int!
weight: Int
foodEntries: [FoodEntry!]!
exerciseEntries: [ExerciseEntry!]!
}
我希望查询在显示数据的地方起作用:
{
"data": {
"getExerciseEntries": [
{
"id": "1",
"caloriesBurned": 100
"user": {
"id": 1,
"calorieGoal": 2000
}
}
]
}
}
或类似的东西。
答案 0 :(得分:0)
该错误表明该字段的null
标记为不可为空(在服务器端)。不确定它抱怨的是哪个字段,但是您可以通过从架构中删除所有的Non-Nullables(删除每个字段上的!
)或从查询中删除所有字段并将它们添加回一个字段来开始调试。找到罪魁祸首的时间。
如果是getExerciseEntries.user
字段,则此处的代码行
const user = await Users.findBy({id: root.exercise_entry_user_id})
返回null
。或者它可能是getExerciseEntries.user.calorieGoal
,因为它也被标记为不可为空。
答案 1 :(得分:0)
我们有两种方法,即findBy和findById。 如果您使用的是findById,则只需
ExerciseEntry: {
exercise_entry_user_id: async (root, args, cxt, info) => {
const user = await Users.findById(root.exercise_entry_user_id);
return user;
}
}
如果您使用的是findBy,则示例可能是:
User: {
exerciseEntries: async (root, args, ctx, info) => {
const entries = await ExerciseEntry.findBy({ exercise_entry_user_id: root.id });
return entries;
}
}
您只需要确保您实际上在从后端调用正确的数据即可,因此命名非常重要。另外,您的typedef必须匹配您要返回的数据。
我们的exerciseEntry Typedef是:
type ExerciseEntry {
id: ID!
exerciseEntryDate: Date!
exerciseName: String!
caloriesBurned: Int!
exercise_entry_user_id: User!
}