在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值,以确保返回正确的类型。