如何在 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.username
为 null
时,这将为用户名 属性 提供 undefined
。如果您处于不确定 undefined
是否已重新分配的环境中,则可以改用 void 0
。如果您使用的是新的 TypeScript 或 EcmaScript 版本,您可以使用更新的 ??
运算符而不是 ||
.
在我的 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.username
为 null
时,这将为用户名 属性 提供 undefined
。如果您处于不确定 undefined
是否已重新分配的环境中,则可以改用 void 0
。如果您使用的是新的 TypeScript 或 EcmaScript 版本,您可以使用更新的 ??
运算符而不是 ||
.