在Apollo GraphQL中,如果定义的字段是非空字段,则该字段不能为空,不能返回null。如果尝试返回null值,则会报“Cannot return null for non-nullable field”错误。
为了解决这个问题,我们需要检查服务端代码中是否确实返回了非空字段的null值。如果是的话,需要找到出现问题的方法并修改它,确保它返回正确的值或者默认值。
例如,我们可以在查询函数中使用更严格的类型,并加入null的处理,确保查询参数不会为空:
type Query {
user(id: ID!): User
}
type User {
id: ID!
name: String!
email: String
}
resolvers = {
Query: {
user(root, { id }, context) {
const user = getUserById(id)
if (!user) {
throw new Error('User not found')
}
return {
id: user.id,
name: user.name,
email: user.email || ''
}
}
}
}
上面的代码中,如果用户没有提供唯一标识符或找不到该标识符,则会抛出异常。在返回User对象时,我们可以使用条件运算符处理email字段的null值,以确保返回正确的类型。