带有所需参数的GraphQL变异器

带有所需参数的GraphQL变异器,graphql,graphql-js,Graphql,Graphql Js,我正在为GraphQL模式编写一个变体: const Schema = new GraphQLSchema({ mutation: new GraphQLObjectType({ name: 'Mutation', fields: () => ({ person: { type: GraphQLString, args: { name: {type: GraphQLString}, sc

我正在为GraphQL模式编写一个变体:

const Schema = new GraphQLSchema({
  mutation: new GraphQLObjectType({
    name: 'Mutation',
    fields: () => ({
      person: {
        type: GraphQLString,
        args: {
          name: {type: GraphQLString},
          school: {type: GraphQLString},
        },
        resolve: mutatePerson,
      },
    }),
  }),
});

我想确保
mutatePerson
仅在
name
school
参数都存在时才起作用。如何检查?

使用
GraphQLNonNull
类型包装器将字段和参数都指定为非null。对于字段,这意味着查询结果中字段的值不能为null。对于参数,这意味着不能忽略参数或参数值为null。因此,您的代码只需要看起来更像这样:

args: {
  name: {
    type: new GraphQLNonNull(GraphQLString),
  },
  school: {
    type: new GraphQLNonNull(GraphQLString),
  },
},

GraphQLNonNull
类型包装器用于将字段和参数都指定为非null。对于字段,这意味着查询结果中字段的值不能为null。对于参数,这意味着不能忽略参数或参数值为null。因此,您的代码只需要看起来更像这样:

args: {
  name: {
    type: new GraphQLNonNull(GraphQLString),
  },
  school: {
    type: new GraphQLNonNull(GraphQLString),
  },
},

如果要拒绝像“”这样的空字符串,最好按照下面的步骤执行(在模型中),它不同于Null,这样可以同时拒绝Null和空“”


如果要拒绝像“”这样的空字符串,最好按照下面的步骤执行(在模型中),它不同于Null,这样可以同时拒绝Null和空“”


当我这样做,然后省略参数
name
时,我得到一个异常
字段“person”参数“name”类型为“String!”是必需的,但没有提供
这不是您试图实现的行为吗?如果没有,请在问题中澄清您试图实现的确切行为我希望向客户端发送错误响应,而不仅仅是打印到服务器端控制台的错误。该错误将作为响应中
错误
数组的一部分返回给客户端。如果您没有看到这一点,我们需要查看更多的服务器端代码,并了解客户端在发出请求时收到的响应类型。啊,这是我的错误处理问题。非常感谢。当我这样做,然后省略参数
name
时,我得到一个异常
字段“person”参数“name”类型为“String!”是必需的,但没有提供
这不是您试图实现的行为吗?如果没有,请在问题中澄清您试图实现的确切行为我希望向客户端发送错误响应,而不仅仅是打印到服务器端控制台的错误。该错误将作为响应中
错误
数组的一部分返回给客户端。如果您没有看到这一点,我们需要查看更多的服务器端代码,并了解客户端在发出请求时收到的响应类型。啊,这是我的错误处理问题。非常感谢。