如何在 Graphql 中设置参数可选?

How to set argument optional in Graphql?

在我的 mongodb 模型中,名称是必需的,但我想在 graphql 中将其设为可选。我该怎么做?

    updateExercise: {
            type: ExerciseType,
            args: {
                id: {type: new GraphQLNonNull(GraphQLString)},
                username: {type: new GraphQLString},
                description: {type: new GraphQLString},
                duration: {type: new GraphQLInt},
                date: {type: new GraphQLString}
            },
            resolve(parent, args) {
                Exercise.findByIdAndUpdate(args.id)
                .then(exercise => {
                    exercise.username = args.username,
                    exercise.description = args.description,
                    exercise.duration = args.duration,
                    exercise.date = args.date
                    exercise.save()
                    .then( () => 'Succesfully Updated')
                    .catch( e => console.log(e) )
                })
            }
        }

您误用了 findByIdAndUpdate 函数。大概应该这样使用:

const SomeType = new GraphQLObjectType({
    updateExercise: {
            type: ExerciseType,
            args: {
                id: {type: new GraphQLNonNull(GraphQLString)},
                username: {type: GraphQLString},
                description: {type: GraphQLString},
                duration: {type: GraphQLInt},
                date: {type: GraphQLString}
            },
            resolve(parent, args) {
                return Exercise.findByIdAndUpdate(args.id, {
                    username: args.username || undefined,
                    description: args.description,
                    duration: args.duration,
                    date: args.date
                }).then(() => 'Succesfully Updated')
                  .catch(e => console.log(e))
            })
        }
    }
});

我们在JS中使用了一个小技巧来将返回值短路。当 args.usernamenull 时,这将为用户名 属性 提供 undefined。如果您处于不确定 undefined 是否已重新分配的环境中,则可以改用 void 0。如果您使用的是新的 TypeScript 或 EcmaScript 版本,您可以使用更新的 ?? 运算符而不是 ||.